Add members
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -5,4 +5,5 @@ fet2020/files/*
|
|||||||
fet2020/.env/*
|
fet2020/.env/*
|
||||||
*.sqlite3
|
*.sqlite3
|
||||||
fet2020/posts/migrations/*
|
fet2020/posts/migrations/*
|
||||||
|
fet2020/members/migrations/*
|
||||||
|
.theia/*
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ CKEDITOR_UPLOAD_PATH = 'upload'
|
|||||||
|
|
||||||
INSTALLED_APPS = [
|
INSTALLED_APPS = [
|
||||||
'posts.apps.PostsConfig',
|
'posts.apps.PostsConfig',
|
||||||
|
'members.apps.MembersConfig',
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
'django.contrib.contenttypes',
|
'django.contrib.contenttypes',
|
||||||
|
|||||||
@@ -31,5 +31,6 @@ urlpatterns = [
|
|||||||
path('', views.index, name='home'),
|
path('', views.index, name='home'),
|
||||||
path('index.html', views.index, name='home'),
|
path('index.html', views.index, name='home'),
|
||||||
path('ckeditor/', include('ckeditor_uploader.urls')),
|
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)
|
]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||||
|
|||||||
0
fet2020/members/__init__.py
Normal file
0
fet2020/members/__init__.py
Normal file
32
fet2020/members/admin.py
Normal file
32
fet2020/members/admin.py
Normal file
@@ -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)
|
||||||
5
fet2020/members/apps.py
Normal file
5
fet2020/members/apps.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class MembersConfig(AppConfig):
|
||||||
|
name = 'members'
|
||||||
19
fet2020/members/forms.py
Normal file
19
fet2020/members/forms.py
Normal file
@@ -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')}
|
||||||
71
fet2020/members/models.py
Normal file
71
fet2020/members/models.py
Normal file
@@ -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()
|
||||||
3
fet2020/members/tests.py
Normal file
3
fet2020/members/tests.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
8
fet2020/members/urls.py
Normal file
8
fet2020/members/urls.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
from django.urls import path
|
||||||
|
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('', views.index, name='index'),
|
||||||
|
]
|
||||||
18
fet2020/members/views.py
Normal file
18
fet2020/members/views.py
Normal file
@@ -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)
|
||||||
Reference in New Issue
Block a user