This commit is contained in:
Mikan
2025-05-18 22:48:39 +03:00
parent c0865fdf51
commit f1dd7fa22a
10 changed files with 236 additions and 23 deletions

View File

@@ -1,3 +1,117 @@
from django.contrib import admin
from .models import (
EventStatus, ActivityType, Event, EventOrganizer,
EventDetail, EventParticipant, MethodicalFile, RelevantMethodicalFile
)
# Register your models here.
@admin.register(EventStatus)
class EventStatusAdmin(admin.ModelAdmin):
list_display = ('name',)
search_fields = ('name',)
@admin.register(ActivityType)
class ActivityTypeAdmin(admin.ModelAdmin):
list_display = ('name',)
search_fields = ('name',)
class EventOrganizerInline(admin.TabularInline):
model = EventOrganizer
extra = 1
autocomplete_fields = ('employee',)
class EventDetailInline(admin.TabularInline):
model = EventDetail
extra = 1
autocomplete_fields = ('activity_type',)
class EventParticipantInline(admin.TabularInline):
model = EventParticipant
extra = 1
autocomplete_fields = ('student',)
@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
list_display = ('name', 'date', 'location', 'status', 'academic_year')
list_filter = ('status', 'academic_year', 'date')
search_fields = ('name', 'location')
inlines = [EventOrganizerInline, EventDetailInline, EventParticipantInline]
autocomplete_fields = ('academic_year', 'status')
fieldsets = (
('Основная информация', {
'fields': ('name', 'academic_year', 'status', 'date', 'location')
}),
('Дополнительно', {
'fields': ('description',)
}),
)
@admin.register(EventOrganizer)
class EventOrganizerAdmin(admin.ModelAdmin):
list_display = ('event', 'employee')
list_filter = ('event__academic_year',)
search_fields = ('employee__account__first_name', 'employee__account__last_name', 'event__name')
autocomplete_fields = ('employee', 'event')
@admin.register(EventDetail)
class EventDetailAdmin(admin.ModelAdmin):
list_display = ('event', 'activity_type')
list_filter = ('activity_type',)
search_fields = ('event__name', 'activity_type__name')
autocomplete_fields = ('event', 'activity_type')
@admin.register(EventParticipant)
class EventParticipantAdmin(admin.ModelAdmin):
list_display = ('student_full_name', 'event', 'points')
list_filter = ('event__academic_year', 'event')
search_fields = (
'student__account__first_name', 'student__account__last_name',
'event__name'
)
autocomplete_fields = ('student', 'event')
@admin.display(description='ФИО студента')
def student_full_name(self, obj):
return str(obj.student)
class RelevantMethodicalFileInline(admin.TabularInline):
model = RelevantMethodicalFile
extra = 1
autocomplete_fields = ('activity_type',)
@admin.register(MethodicalFile)
class MethodicalFileAdmin(admin.ModelAdmin):
list_display = ('name', 'specialty', 'upload_date', 'employee')
list_filter = ('specialty', 'upload_date')
search_fields = ('name', 'specialty__name', 'employee__account__first_name', 'employee__account__last_name')
autocomplete_fields = ('specialty', 'employee')
fieldsets = (
('Основная информация', {
'fields': ('name', 'specialty', 'file_path')
}),
('Дополнительно', {
'fields': ('employee',)
}),
)
inlines = [RelevantMethodicalFileInline]
@admin.register(RelevantMethodicalFile)
class RelevantMethodicalFileAdmin(admin.ModelAdmin):
list_display = ('methodical_file', 'activity_type')
list_filter = ('activity_type',)
search_fields = ('methodical_file__name', 'activity_type__name')
autocomplete_fields = ('methodical_file', 'activity_type')

View File

@@ -4,3 +4,4 @@ from django.apps import AppConfig
class EventsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'events'
verbose_name = 'Мероприятия'

View File

@@ -13,6 +13,7 @@ class EventStatus(models.Model):
class Meta:
verbose_name = "Статус проведения"
verbose_name_plural = "Статусы проведения"
ordering = ["name"]
class ActivityType(models.Model):
@@ -24,7 +25,7 @@ class ActivityType(models.Model):
class Meta:
verbose_name = "Деятельность мероприятия"
verbose_name_plural = "Деятельности мероприятий"
ordering = ["name"]
class Event(models.Model):
academic_year = models.ForeignKey(
@@ -44,7 +45,7 @@ class Event(models.Model):
class Meta:
verbose_name = "Мероприятие"
verbose_name_plural = "Мероприятия"
ordering = ["date", "name"]
class EventOrganizer(models.Model):
employee = models.ForeignKey(
@@ -61,7 +62,7 @@ class EventOrganizer(models.Model):
verbose_name = "Организатор мероприятия"
verbose_name_plural = "Организаторы мероприятий"
unique_together = ("employee", "event")
ordering = ["employee", "event"]
class EventDetail(models.Model):
activity_type = models.ForeignKey(
@@ -78,7 +79,7 @@ class EventDetail(models.Model):
verbose_name = "Деталь мероприятия"
verbose_name_plural = "Детали мероприятий"
unique_together = ("activity_type", "event")
ordering = ["activity_type", "event"]
class EventParticipant(models.Model):
student = models.ForeignKey(
@@ -95,7 +96,7 @@ class EventParticipant(models.Model):
class Meta:
verbose_name = "Участник мероприятия"
verbose_name_plural = "Участники мероприятий"
ordering = ["event", "student"]
class MethodicalFile(models.Model):
specialty = models.ForeignKey(
@@ -114,7 +115,7 @@ class MethodicalFile(models.Model):
class Meta:
verbose_name = "Методический файл"
verbose_name_plural = "Методические файлы"
ordering = ["specialty", "name", "upload_date", "employee"]
class RelevantMethodicalFile(models.Model):
methodical_file = models.ForeignKey(
@@ -131,3 +132,4 @@ class RelevantMethodicalFile(models.Model):
verbose_name = "Релевантный методический файл"
verbose_name_plural = "Релевантные методические файлы"
ordering = ["methodical_file", "activity_type"]