Add members
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -5,4 +5,5 @@ fet2020/files/*
|
||||
fet2020/.env/*
|
||||
*.sqlite3
|
||||
fet2020/posts/migrations/*
|
||||
|
||||
fet2020/members/migrations/*
|
||||
.theia/*
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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)
|
||||
|
||||
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