Improved Model Admin views, student adds user for login
This commit is contained in:
@@ -1,24 +1,31 @@
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.contrib import admin
|
||||
import nested_admin
|
||||
from django import forms
|
||||
from .models import *
|
||||
from datetime import date
|
||||
from durationwidget.widgets import TimeDurationWidget
|
||||
import nested_admin
|
||||
|
||||
class HourBuildingLegForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = HourBuildingLeg
|
||||
fields = '__all__'
|
||||
widgets = {
|
||||
'time': TimeDurationWidget(show_days=False,
|
||||
show_seconds=False
|
||||
)
|
||||
}
|
||||
|
||||
class TrainingForm(forms.ModelForm):
|
||||
model=Training
|
||||
|
||||
def get_form(self, request, obj=None, **kwargs):
|
||||
form = super().get_form(request, obj, **kwargs)
|
||||
form.base_fields['mission'].widget.can_add_related = False
|
||||
form.base_fields['mission'].widget.can_delete_related = False
|
||||
form.base_fields['mission'].widget.can_change_related = False
|
||||
print("pluto")
|
||||
return form
|
||||
|
||||
# Register your models here.
|
||||
class HourBuildingLegInline(nested_admin.NestedTabularInline):
|
||||
model = HourBuildingLeg
|
||||
form = HourBuildingLegForm
|
||||
extra = 0
|
||||
fk_name = 'hb'
|
||||
max_num = 5
|
||||
|
||||
class HourBuildingInLine(nested_admin.NestedTabularInline):
|
||||
model = HourBuilding
|
||||
@@ -31,24 +38,51 @@ class HourBuildingInLine(nested_admin.NestedTabularInline):
|
||||
class TrainingInLIne(nested_admin.NestedTabularInline):
|
||||
model = Training
|
||||
form = TrainingForm
|
||||
extra = 1
|
||||
extra = 0
|
||||
fk_name = 'weekpref'
|
||||
verbose_name_plural = "Training Missions"
|
||||
max_num = 7
|
||||
|
||||
def get_formset(self, request, obj=None, **kwargs):
|
||||
formset = super(TrainingInLIne, self).get_formset(request, obj=None, **kwargs)
|
||||
return formset
|
||||
|
||||
class WeekPreferenceAdmin(nested_admin.NestedModelAdmin):
|
||||
inlines = [TrainingInLIne, HourBuildingInLine]
|
||||
list_filter = ["week", "student__course", "student"]
|
||||
|
||||
def has_module_permission(self, request):
|
||||
if hasattr(request.user, 'student'):
|
||||
return False
|
||||
return True
|
||||
|
||||
def get_queryset(self, request):
|
||||
qs = super().get_queryset(request)
|
||||
# If a user is registered as student show only their preferences
|
||||
if hasattr(request.user, 'student'):
|
||||
return qs.filter(student=request.user.student)
|
||||
# If admin show everything
|
||||
return qs
|
||||
|
||||
def get_form(self, request, obj=None, **kwargs):
|
||||
form: forms.Form = super().get_form(request, obj, **kwargs)
|
||||
form.base_fields['student'].widget.can_add_related = False
|
||||
form.base_fields['student'].widget.can_delete_related = False
|
||||
form.base_fields['student'].widget.can_change_related = False
|
||||
|
||||
# If student is current user making request
|
||||
if hasattr(request.user, 'student'):
|
||||
student = request.user.student
|
||||
if 'student' in form.base_fields:
|
||||
form.base_fields['student'].initial = student
|
||||
form.base_fields['student'].disabled = True
|
||||
|
||||
# If form contains the week field
|
||||
if 'week' in form.base_fields:
|
||||
# Set default value as current week
|
||||
current_week = date.today().isocalendar().week
|
||||
form.base_fields['week'].initial = current_week
|
||||
form.base_fields['week'].disabled = True
|
||||
return form
|
||||
|
||||
def save_model(self, request, obj, form, change):
|
||||
# Imposta automaticamente lo studente se non è già valorizzato
|
||||
if hasattr(request.user, 'student') and not obj.student_id:
|
||||
obj.student = request.user.student
|
||||
super().save_model(request, obj, form, change)
|
||||
|
||||
class StudentAdmin(admin.ModelAdmin):
|
||||
list_display = ("surname", "name", "course", "email","active")
|
||||
|
||||
Reference in New Issue
Block a user