from django.core.exceptions import ValidationError from django.contrib import 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 # 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 extra = 0 inlines = [HourBuildingLegInline] fk_name = 'weekpref' verbose_name_plural = "Hour Building" max_num = 7 class TrainingInLIne(nested_admin.NestedTabularInline): model = Training form = TrainingForm extra = 0 fk_name = 'weekpref' verbose_name_plural = "Training Missions" max_num = 7 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) # 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") list_filter = ["course", "active"] class CourseAdmin(admin.ModelAdmin): list_filter = ["ctype", "year"] admin.site.register(Course, CourseAdmin) admin.site.register(MissionProfile) admin.site.register(Student, StudentAdmin) admin.site.register(WeekPreference, WeekPreferenceAdmin)