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,90 @@
from django.contrib import admin
from .models import (
InstitutionType, Representative, School, Partner,
PartnerRepresentative, SchoolResponsibility
)
# Register your models here.
@admin.register(InstitutionType)
class InstitutionTypeAdmin(admin.ModelAdmin):
list_display = ('name',)
search_fields = ('name',)
@admin.register(Representative)
class RepresentativeAdmin(admin.ModelAdmin):
list_display = ('full_name', 'position')
search_fields = ('first_name', 'last_name', 'middle_name', 'phone', 'email', 'position')
@admin.display(description='ФИО')
def full_name(self, obj):
return str(obj)
fieldsets = (
('Основная информация', {
'fields': ('first_name', 'last_name', 'middle_name', 'position')
}),
('Контактные данные', {
'fields': ('phone', 'email')
}),
)
class PartnerRepresentativeInline(admin.TabularInline):
model = PartnerRepresentative
extra = 1
autocomplete_fields = ('representative',)
@admin.register(Partner)
class PartnerAdmin(admin.ModelAdmin):
list_display = ('name',)
search_fields = ('name',)
inlines = [PartnerRepresentativeInline]
fieldsets = (
('Основная информация', {
'fields': ('name', 'description')
}),
)
@admin.register(PartnerRepresentative)
class PartnerRepresentativeAdmin(admin.ModelAdmin):
list_display = ('representative', 'partner')
search_fields = ('representative__first_name', 'representative__last_name', 'partner__name')
autocomplete_fields = ('representative', 'partner')
@admin.register(School)
class SchoolAdmin(admin.ModelAdmin):
list_display = ('name', 'institution_type', 'director')
list_filter = ('institution_type',)
search_fields = ('name', 'address', 'director__first_name', 'director__last_name')
autocomplete_fields = ('director', 'institution_type')
fieldsets = (
('Основная информация', {
'fields': ('name', 'institution_type', 'address')
}),
('Директор', {
'fields': ('director',)
}),
)
@admin.register(SchoolResponsibility)
class SchoolResponsibilityAdmin(admin.ModelAdmin):
list_display = ('academic_year', 'school', 'responsible')
list_filter = ('academic_year', 'school__institution_type')
search_fields = (
'school__name', 'responsible__first_name',
'responsible__last_name', 'academic_year__year'
)
autocomplete_fields = ('school', 'responsible', 'academic_year')
fieldsets = (
('Ответственность', {
'fields': ('academic_year', 'school', 'responsible')
}),
)

View File

@@ -4,3 +4,4 @@ from django.apps import AppConfig
class OutreachConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'outreach'
verbose_name = 'Профориентационная работа'

View File

@@ -14,18 +14,19 @@ class InstitutionType(models.Model):
class Meta:
verbose_name = "Вид учебного заведения"
verbose_name_plural = "Виды учебных заведений"
ordering = ["name"]
class Representative(ContactMixin):
position = models.CharField(max_length=100, blank=True, null=True, verbose_name="Должность")
def __str__(self):
return f"{self.last_name} {self.first_name} - {self.position}"
return f"{super().__str__()}"+(" - "+self.position if self.position else "")
class Meta:
verbose_name = "Представитель"
verbose_name_plural = "Представители"
ordering = ["position"]
class School(models.Model):
director = models.ForeignKey(
@@ -43,7 +44,7 @@ class School(models.Model):
class Meta:
verbose_name = "Школа"
verbose_name_plural = "Школы"
ordering = ["institution_type", "name", "address"]
class Partner(models.Model):
name = models.CharField(max_length=200, verbose_name="Название")
@@ -55,7 +56,7 @@ class Partner(models.Model):
class Meta:
verbose_name = "Партнер"
verbose_name_plural = "Партнеры"
ordering = ["name"]
class PartnerRepresentative(models.Model):
representative = models.OneToOneField(
@@ -72,7 +73,7 @@ class PartnerRepresentative(models.Model):
verbose_name = "Представитель партнера"
verbose_name_plural = "Представители партнеров"
unique_together = ("representative", "partner")
ordering = ["partner", "representative"]
class SchoolResponsibility(models.Model):
academic_year = models.ForeignKey(
@@ -91,4 +92,4 @@ class SchoolResponsibility(models.Model):
class Meta:
verbose_name = "Ответственный за школу"
verbose_name_plural = "Ответственные за школы"
ordering = ["academic_year", "responsible", "school"]