outreach
This commit is contained in:
@@ -19,7 +19,7 @@ class DepartmentHeadAdmin(admin.ModelAdmin):
|
||||
list_display = ('department', 'head')
|
||||
list_filter = ('department',)
|
||||
autocomplete_fields = ('department', 'head')
|
||||
search_fields = ('department__name', 'head__first_name', 'head__last_name')
|
||||
search_fields = ('department__name', 'head__account__first_name', 'head__account__last_name')
|
||||
|
||||
|
||||
@admin.register(Specialty)
|
||||
@@ -33,7 +33,7 @@ class SpecialtyAdmin(admin.ModelAdmin):
|
||||
class GroupAdmin(admin.ModelAdmin):
|
||||
list_display = ('name', 'specialty', 'curator')
|
||||
list_filter = ('specialty__department', 'specialty')
|
||||
search_fields = ('name', 'specialty__name', 'curator__first_name', 'curator__last_name')
|
||||
search_fields = ('name', 'specialty__name', 'curator__account__first_name', 'curator__account__last_name')
|
||||
autocomplete_fields = ('specialty', 'curator')
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ class StudentAdmin(admin.ModelAdmin):
|
||||
list_display = ('full_name', 'group', 'account')
|
||||
list_filter = ('group__specialty__department', 'group__specialty', 'group')
|
||||
search_fields = (
|
||||
'first_name', 'last_name', 'middle_name',
|
||||
'account__first_name', 'account__last_name', 'account__middle_name',
|
||||
'group__name', 'account__login'
|
||||
)
|
||||
autocomplete_fields = ('group', 'account')
|
||||
|
||||
@@ -14,6 +14,7 @@ class AcademicYear(models.Model):
|
||||
class Meta:
|
||||
verbose_name = "Учебный год"
|
||||
verbose_name_plural = "Учебные годы"
|
||||
ordering = ['-year']
|
||||
|
||||
|
||||
class Department(models.Model):
|
||||
@@ -25,6 +26,7 @@ class Department(models.Model):
|
||||
class Meta:
|
||||
verbose_name = "Учебное отделение"
|
||||
verbose_name_plural = "Учебные отделения"
|
||||
ordering = ["name"]
|
||||
|
||||
|
||||
class DepartmentHead(models.Model):
|
||||
@@ -42,6 +44,7 @@ class DepartmentHead(models.Model):
|
||||
verbose_name = "Руководитель отделения"
|
||||
verbose_name_plural = "Руководители отделений"
|
||||
unique_together = ("department", "head")
|
||||
ordering = ["department", "head"]
|
||||
|
||||
|
||||
class Specialty(models.Model):
|
||||
@@ -57,6 +60,7 @@ class Specialty(models.Model):
|
||||
class Meta:
|
||||
verbose_name = "Специальность"
|
||||
verbose_name_plural = "Специальности"
|
||||
ordering = ["code"]
|
||||
|
||||
|
||||
class Group(models.Model):
|
||||
@@ -72,8 +76,9 @@ class Group(models.Model):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Группа"
|
||||
verbose_name_plural = "Группы"
|
||||
verbose_name = "Студенческая группа"
|
||||
verbose_name_plural = "Студенческие группы"
|
||||
ordering = ["name", "specialty"]
|
||||
|
||||
|
||||
class Student(models.Model):
|
||||
@@ -126,4 +131,5 @@ class Student(models.Model):
|
||||
class Meta:
|
||||
verbose_name = "Студент"
|
||||
verbose_name_plural = "Студенты"
|
||||
ordering = ["group", "account"]
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ class EmployeeAdmin(admin.ModelAdmin):
|
||||
list_display = ('full_name', 'position', 'department', 'account')
|
||||
list_filter = ('department', 'position')
|
||||
search_fields = (
|
||||
'first_name', 'last_name', 'middle_name',
|
||||
'phone', 'email', 'position__name', 'department__name'
|
||||
'account__first_name', 'account__last_name', 'account__middle_name',
|
||||
'account__phone', 'account__email', 'position__name', 'department__name'
|
||||
)
|
||||
autocomplete_fields = ('department', 'position', 'account')
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ class Position(models.Model):
|
||||
class Meta:
|
||||
verbose_name = "Должность"
|
||||
verbose_name_plural = "Должности"
|
||||
ordering = ["name"]
|
||||
|
||||
|
||||
class Department(models.Model):
|
||||
@@ -23,7 +24,7 @@ class Department(models.Model):
|
||||
class Meta:
|
||||
verbose_name = "Подразделение"
|
||||
verbose_name_plural = "Подразделения"
|
||||
|
||||
ordering = ["name"]
|
||||
|
||||
class Employee(models.Model):
|
||||
department = models.ForeignKey(
|
||||
@@ -85,4 +86,4 @@ class Employee(models.Model):
|
||||
class Meta:
|
||||
verbose_name = "Сотрудник"
|
||||
verbose_name_plural = "Сотрудники"
|
||||
|
||||
ordering = ["department", "position", "account"]
|
||||
|
||||
116
events/admin.py
116
events/admin.py
@@ -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')
|
||||
@@ -4,3 +4,4 @@ from django.apps import AppConfig
|
||||
class EventsConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'events'
|
||||
verbose_name = 'Мероприятия'
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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')
|
||||
}),
|
||||
)
|
||||
@@ -4,3 +4,4 @@ from django.apps import AppConfig
|
||||
class OutreachConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'outreach'
|
||||
verbose_name = 'Профориентационная работа'
|
||||
|
||||
@@ -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"]
|
||||
|
||||
Reference in New Issue
Block a user