From 5b7e7fe31de6b44d1588fb44fde21adb010ca849 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B0=D0=B2=D0=B5=D0=BB=20=D0=9D=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D1=80=D0=BE=D0=B2?= Date: Wed, 8 May 2024 14:03:07 +0300 Subject: [PATCH] created student and teacher models --- src/schooling/admin.py | 17 ++++++++++ src/schooling/models.py | 71 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/src/schooling/admin.py b/src/schooling/admin.py index e69de29..96837a1 100644 --- a/src/schooling/admin.py +++ b/src/schooling/admin.py @@ -0,0 +1,17 @@ +from django.contrib import admin + +from schooling.models import Student, Teacher + + +@admin.register(Teacher) +class TeacherAdmin(admin.ModelAdmin): + """Управление преподавателями.""" + + list_display = ('name', 'surname', 'competence') + + +@admin.register(Student) +class StudentAdmin(admin.ModelAdmin): + """Управление студентами.""" + + list_display = ('name', 'surname', 'paid_lessons') diff --git a/src/schooling/models.py b/src/schooling/models.py index e69de29..f5f337b 100644 --- a/src/schooling/models.py +++ b/src/schooling/models.py @@ -0,0 +1,71 @@ +from django.db import models +from phonenumber_field.modelfields import PhoneNumberField + +MAX_LEN_NAME_SURNAME = 150 +MAX_LEN_CITY = 50 + + +class GeneralUserModel(models.Model): + """Базовая, абстрактная модель пользователя.""" + + telegram_id = models.IntegerField('Telegram ID', unique=True) + name = models.CharField('Имя', max_length=MAX_LEN_NAME_SURNAME) + surname = models.CharField('Фамилия', max_length=MAX_LEN_NAME_SURNAME) + city = models.CharField('Город', max_length=MAX_LEN_CITY) + phone_number = PhoneNumberField('Номер телефона') + last_login_date = models.DateField('Последнее посещение', auto_now=True) + registration_date = models.DateField('Дата регистрации', auto_now_add=True) + + class Meta: + """Meta class of GeneralUserModel.""" + + abstract = True + + def __str__(self): + """Return a general user string representation.""" + return f'{self.name} {self.surname} {self.telegram_id}' + + +class Teacher(GeneralUserModel): + """Модель преподавателя.""" + + competence = models.ManyToManyField( + 'Subject', verbose_name='Предмет', + ) + study_classes = models.ManyToManyField( + 'StudyClass', verbose_name='Учебный класс', + ) + + class Meta: + """Meta class of TeacherModel.""" + + verbose_name = 'Преподаватель' + verbose_name_plural = 'Преподаватели' + + def __str__(self): + """Return a teacher string representation.""" + return f'{self.name} {self.surname} {self.competence}' + + +class Student(GeneralUserModel): + """Модель студента.""" + + study_class_id = models.ForeignKey( + 'StudyClass', on_delete=models.SET_NULL, + verbose_name='ID учебного класса', related_name='students', + ) + paid_lessons = models.PositiveIntegerField('Оплаченые занятия') + parents_contacts = models.CharField('Контакты представителей') + subjects = models.ManyToManyField( + 'Subject', verbose_name='Предмет', + ) + + class Meta: + """Meta class of StudentModel.""" + + verbose_name = 'Студент' + verbose_name_plural = 'Студенты' + + def __str__(self): + """Return a student string representation.""" + return f'{self.name} {self.surname} {self.subjects}'