diff --git a/.gitignore b/.gitignore index 04970b2b..67258286 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ fet2020/files/* fet2020/.env/* *.sqlite3 fet2020/posts/migrations/* - +fet2020/members/migrations/* +.theia/* diff --git a/fet2020/fet2020/settings.py b/fet2020/fet2020/settings.py index ca8321cc..79f1572e 100644 --- a/fet2020/fet2020/settings.py +++ b/fet2020/fet2020/settings.py @@ -33,6 +33,7 @@ CKEDITOR_UPLOAD_PATH = 'upload' INSTALLED_APPS = [ 'posts.apps.PostsConfig', + 'members.apps.MembersConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', diff --git a/fet2020/fet2020/urls.py b/fet2020/fet2020/urls.py index bd8395f9..c446fe73 100644 --- a/fet2020/fet2020/urls.py +++ b/fet2020/fet2020/urls.py @@ -25,11 +25,12 @@ router = routers.DefaultRouter() router.register(r'posts', PostViewSet) urlpatterns = [ - path('posts/',include('posts.urls')), + path('posts/', include('posts.urls')), path('admin/doc/', include('django.contrib.admindocs.urls')), path('admin/', admin.site.urls), path('', views.index, name='home'), path('index.html', views.index, name='home'), path('ckeditor/', include('ckeditor_uploader.urls')), - path('api/', include(router.urls)) + path('api/', include(router.urls)), + path('members/', include('members.urls')), ]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/fet2020/members/__init__.py b/fet2020/members/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/fet2020/members/admin.py b/fet2020/members/admin.py new file mode 100644 index 00000000..3c5d6897 --- /dev/null +++ b/fet2020/members/admin.py @@ -0,0 +1,32 @@ +from django.contrib import admin +from .models import Member, Job, JobMember +from .forms import MyMemberForm, MyJobForm + + +class JobMemberInline(admin.TabularInline): + model = JobMember + extra = 1 + +class MyMemberAdmin(admin.ModelAdmin): + form = MyMemberForm + model = Member + list_display = ['name', 'nickname', 'mailaccount', 'role', 'body', 'image'] + inlines = (JobMemberInline,) + + def save_model(self, request, obj, form, change): + obj.author = request.user + super().save_model(request, obj, form, change) + +admin.site.register(Member, MyMemberAdmin) + +class MyJobAdmin(admin.ModelAdmin): + form = MyJobForm + model = Job + list_display = ['name', 'body', 'image'] + inlines = (JobMemberInline,) + + def save_model(self, request, obj, form, change): + obj.author = request.user + super().save_model(request, obj, form, change) + +admin.site.register(Job, MyJobAdmin) \ No newline at end of file diff --git a/fet2020/members/apps.py b/fet2020/members/apps.py new file mode 100644 index 00000000..f773ade1 --- /dev/null +++ b/fet2020/members/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class MembersConfig(AppConfig): + name = 'members' diff --git a/fet2020/members/forms.py b/fet2020/members/forms.py new file mode 100644 index 00000000..a92ce5ee --- /dev/null +++ b/fet2020/members/forms.py @@ -0,0 +1,19 @@ +from django import forms +from ckeditor_uploader.widgets import CKEditorUploadingWidget + +from .models import Member, Job + + +class MyMemberForm(forms.ModelForm): + class Meta: + model = Member + fields = ['name','nickname','mailaccount', 'role', 'body', 'image'] + + widgets = {'body': CKEditorUploadingWidget(config_name='default')} + +class MyJobForm(forms.ModelForm): + class Meta: + model = Job + fields = ['name', 'body', 'image'] + + widgets = {'body': CKEditorUploadingWidget(config_name='default')} \ No newline at end of file diff --git a/fet2020/members/models.py b/fet2020/members/models.py new file mode 100644 index 00000000..c4e535dd --- /dev/null +++ b/fet2020/members/models.py @@ -0,0 +1,71 @@ +from django.db import models +from django.utils.translation import gettext_lazy as _ + +import uuid + + +class MemberManager(models.Manager): + def get_queryset(self): + return super().get_queryset().filter(role='A') + +class PensionManager(models.Manager): + def get_queryset(self): + return super().get_queryset().filter(role='P') + +class Member(models.Model): +# id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + name = models.CharField(max_length=128) + nickname = models.CharField(max_length=128) + mailaccount = models.CharField(max_length=128) + + role = models.CharField(max_length=1, choices=[('A', _('Active')), ('P', _('Pension'))], default='A') + + body = models.TextField(null=True, blank=True) + image = models.ImageField(null=True, blank=True) + + #birthday + #handy phone + + # TimeStamps + date_modified = models.DateTimeField(auto_now=True) + date_created = models.DateTimeField(auto_now_add=True) + has_jobs = models.ManyToManyField( + 'Job', + through='JobMember', + through_fields=('member', 'job') + ) + + # Managers + all_members = models.Manager() + active_member = MemberManager() + pension_member = PensionManager() + + def __str__(self): + return self.name + +class Job(models.Model): + name = models.CharField(max_length=128) + + body = models.TextField(null=True, blank=True) + image = models.ImageField(null=True, blank=True) + + has_members = models.ManyToManyField( + 'Member', + through='JobMember', + through_fields=('job', 'member') + ) + + def __str__(self): + return self.name + +class JobMember(models.Model): + member = models.ForeignKey(Member, on_delete=models.CASCADE) + job = models.ForeignKey(Job, on_delete=models.CASCADE) + + job_start = models.DateField('Job Start') + job_end = models.DateField('Job Ende', null=True, blank=True) + + class Meta: + unique_together = [['member', 'job']] + + jobmember = models.Manager() \ No newline at end of file diff --git a/fet2020/members/tests.py b/fet2020/members/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/fet2020/members/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/fet2020/members/urls.py b/fet2020/members/urls.py new file mode 100644 index 00000000..37380afd --- /dev/null +++ b/fet2020/members/urls.py @@ -0,0 +1,8 @@ +from django.urls import path + +from . import views + + +urlpatterns = [ + path('', views.index, name='index'), +] \ No newline at end of file diff --git a/fet2020/members/views.py b/fet2020/members/views.py new file mode 100644 index 00000000..f594e996 --- /dev/null +++ b/fet2020/members/views.py @@ -0,0 +1,18 @@ +from django.shortcuts import render +from django.http import HttpResponse + +from collections import deque + +from .models import Member, JobMember + + +def index(request): + member = deque(Member.member.all()) + jobmember = deque(JobMember.jobmember.all()) + + context = { + "member": member, + "jobmember": jobmember + } + + return render(request, 'member/index.html', context) \ No newline at end of file