Fixes #63
This commit is contained in:
Gunther Weissenbaeck 2023-10-16 21:05:44 +02:00
parent a6833026c0
commit d651e03b12
18 changed files with 196 additions and 58 deletions

0
app/contact/__init__.py Normal file
View file

14
app/contact/admin.py Normal file
View file

@ -0,0 +1,14 @@
from django.contrib import admin
from .models import Contact
@admin.register(Contact)
class FallenBirdAdmin(admin.ModelAdmin):
list_display = [
"name",
"phone",
"email",
"address",
"comment",
]
list_filter = ("name", "phone", "email", "address", "comment")

8
app/contact/apps.py Normal file
View file

@ -0,0 +1,8 @@
from django.apps import AppConfig
from django.utils.translation import gettext_lazy as _
class ContactConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'contact'
verbose_name=_("Kontakte")

View file

@ -0,0 +1,26 @@
# Generated by Django 4.2.5 on 2023-10-16 18:42
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Contact',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('name', models.CharField(blank=True, max_length=50, null=True, verbose_name='Kontakt Name')),
('phone', models.CharField(blank=True, max_length=50, null=True, verbose_name='Telefon')),
('email', models.CharField(blank=True, max_length=50, null=True, verbose_name='Email')),
('address', models.CharField(blank=True, max_length=50, null=True, verbose_name='Adresse')),
('comment', models.CharField(blank=True, max_length=50, null=True, verbose_name='Bemerkungen')),
],
),
]

View file

28
app/contact/models.py Normal file
View file

@ -0,0 +1,28 @@
from django.db import models
from uuid import uuid4
from django.utils.translation import gettext_lazy as _
class Contact(models.Model):
id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
name = models.CharField(
max_length=50, null=True, blank=True, verbose_name=_("Kontakt Name")
)
phone = models.CharField(
max_length=50, null=True, blank=True, verbose_name=_("Telefon")
)
email = models.CharField(
max_length=50, null=True, blank=True, verbose_name=_("Email")
)
address = models.CharField(
max_length=50, null=True, blank=True, verbose_name=_("Adresse")
)
comment = models.CharField(
max_length=50, null=True, blank=True, verbose_name=_("Bemerkungen")
)
class Meta:
verbose_name = _("Kontakt")
verbose_name_plural = _("Kontakte")

View file

@ -0,0 +1,75 @@
{% extends "base.html" %}
{% load static %}
{% block header %}
<!-- Datatable CSS -->
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/dataTables.bootstrap5.min.css" />
<link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.2.9/css/responsive.bootstrap5.min.css">
<!-- Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<!-- Datatable jQuery -->
<script src="https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.11.3/js/dataTables.bootstrap5.min.js"></script>
<script src="https://cdn.datatables.net/responsive/2.2.9/js/dataTables.responsive.min.js"></script>
<script src="https://cdn.datatables.net/responsive/2.2.9/js/responsive.bootstrap5.min.js"></script>
<!-- Configure the DataTable. -->
<script nonce="{{ request.csp_nonce }}">
$(document).ready(function () {
let table = $('#t__contact_all').DataTable({
language: {
url: 'https://cdn.datatables.net/plug-ins/1.11.3/i18n/de_de.json',
},
paging: true,
info: true,
"pagingType": "first_last_numbers",
responsive: true,
scrollX: true,
order: [[2, 'desc']],
columnDefs: [
{ responsivePriority: 1, targets: 0 },
]
});
table.on( 'responsive-display', function ( e, datatable, row, showHide, update ) {
table.rows().every( function () {
if (showHide && row.index() !== this.index() && this.child.isShown()) {
$('td', this.node()).eq(0).click();
}
});
});
})
</script>
{% endblock header %}
{% block content %}
<h3>Übersicht aller Kontakte</h3>
<p>Die Übersicht aller bisher hinterlegten Kontakte.</p>
<table class="table table-striped table-hover display responsive nowrap" width="100%" id="t__contact_all">
<thead>
<tr>
<th>Name</th>
<th>Telefon</th>
<th>Email</th>
<th>Adresse</th>
<th>Bemerkung</th>
</tr>
</thead>
<tbody>
{% for item in contacts %}
<tr>
<td> {{ item.name }} </td>
<td> {{ item.phone|default_if_none:"" }}</td>
<td> {{ item.email|default_if_none:"" }} </td>
<td> {{ item.address|default_if_none:"" }} </td>
<td> {{ item.comment|default_if_none:"" }} </td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock content %}

3
app/contact/tests.py Normal file
View file

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

7
app/contact/urls.py Normal file
View file

@ -0,0 +1,7 @@
from django.urls import path
from .views import contact_all
urlpatterns = [
path("", contact_all, name="contact_all"),
]

10
app/contact/views.py Normal file
View file

@ -0,0 +1,10 @@
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import Contact
@login_required(login_url="account_login")
def contact_all(request):
contacts = Contact.objects.all()
context = {"contacts": contacts}
return render(request, "contact/contact_all.html", context)