Comme le titre l'indique, utilisez la page d'administration. Ce que je voudrais expérimenter ici, c'est
** Filtrer les rendez-vous par date **
** Suivez la relation à l'envers **
est. J'ai senti que tous étaient Tutoriel, alors je l'ai essayé après avoir examiné.
C'est à chaque admin.py de jouer avec. Regardons-les dans l'ordre.
schedule/admin.py
from django.contrib import admin
from schedule.models import WorkTime,MonthShift,StaffSchedule,NgShift,GuestSchedule
#### base classes ####
class DateAdmin(admin.ModelAdmin):
def schedule_date(self,obj): #obj contient un objet modèle
return obj.strfdate() #Renvoie ce que vous voulez voir sur la page de la liste des modifications
date_hierarchy = 'date' #Définir la fonction de filtrage par objet de date
class TimeTableAdmin(admin.ModelAdmin):
def time_table(self,obj):
return obj.strftimetable()
#### main classes ####
###### staff ######
class MonthShiftAdmin(admin.ModelAdmin):
list_display = ('year','month','groupschedule','completed',) #Liste des éléments ou touche à afficher sur la page de la liste des modifications.
list_filter = ('groupschedule',) #Ajoute une fonction de filtre pour les éléments spécifiés
admin.site.register(MonthShift,MonthShiftAdmin) #Appliquer en mettant le modèle pour admin dans le deuxième argument
class WorkTimeAdmin(TimeTableAdmin):
list_display = ('title','time_table',) # time_table est une fonction du parent
list_filter = ('groupschedule',)
admin.site.register(WorkTime,WorkTimeAdmin)
class StaffScheduleAdmin(DateAdmin):
list_display = ('schedule_date','staff','worktime',) # schedule_la date est une fonction du parent
list_filter = ('staff__groupschedule','date','staff',) #Vous pouvez suivre la relation inverse avec deux traits de soulignement
admin.site.register(StaffSchedule,StaffScheduleAdmin)
class NgShiftAdmin(DateAdmin):
list_display = ('staff','schedule_date','get_values')
def get_values(self,obj):
return obj.ng_values()
list_filter = ['date','staff',]
admin.site.register(NgShift,NgShiftAdmin)
###### guest ######
class GuestScheduleAdmin(DateAdmin,TimeTableAdmin):
list_display = ('schedule_date','guest','time_table',)
list_filter = ['date','guest',]
admin.site.register(GuestSchedule,GuestScheduleAdmin)
Il définit une classe parent pour enregistrer le code. Expérimentez pour affiner les éléments par list_filter. Je pourrais les voir séparément par date, donc ce serait bien de faire quelque chose de similaire lors de la création d'une table de décalage.
staff/admin.py
from django.contrib import admin
from staff.models import Staff
class StaffAdmin(admin.ModelAdmin):
list_display = ('name','ng_list',)
list_filter = ('groupschedule',)
def ng_list(self,obj):
ngs = ""
for ng in obj.ngshift_set.all():
ngs += "%s(%s) ," % ( ng.date,ng.ng_values(), )
return ngs
admin.site.register(Staff,StaffAdmin)
La relation inverse avec xxxx_set a également réussi.
guest/admin.py
from django.contrib import admin
from guest.models import Guest
class GuestAdmin(admin.ModelAdmin):
list_display = ('name','get_schedules',)
list_filter = ('groupschedule',)
def get_schedules(self,obj):
schedules = ""
for schedule in obj.guestschedule_set.all():
schedules += "%s(%s) ," % ( schedule.date,schedule.strftimetable(), )
return schedules
get_schedules.short_description = 'Schedules'
admin.site.register(Guest,GuestAdmin)
Ce n'est pas très différent de staff / admin.py.
owner/admin.py
from django.contrib import admin
from owner.models import GroupSchedule
class GroupScheduleAdmin(admin.ModelAdmin):
list_display = ('group','owner',)
admin.site.register(GroupSchedule,GroupScheduleAdmin)
Cela devient ennuyeux, alors je ne l'ai pas ajouté hier. Je ne vais pas utiliser l'écran d'administration à la fin, donc ça va.
Recommended Posts