Улучшение кода модели Django

Разрабатываю модели в проекте Django 4. Необходимо сделать модель-архив, которая будет иметь точно такие же поля, что и основная модель. Решил использовать наследование при создании второго класса. Но получается копирование хорошего куска кода, можно ли как то избавится от этого и как лучше выполнить поставленную задачу?

class Registration(models.Model):
    id = models.AutoField(primary_key=True)
    Attend_type = models.CharField(max_length=20, choices=[("LC", "Lecture"), ("MS", "Master-class")])
    Lecture = models.ForeignKey(Lecture, null=True, blank=True, on_delete=models.CASCADE)
    Master_class = models.ForeignKey(MasterClass, null=True, blank=True, on_delete=models.CASCADE)
    User = models.ForeignKey(User, on_delete=models.CASCADE)
    Time = models.CharField(max_length=20)
    Registration_time = models.DateTimeField()

    def __str__(self):
        return self.Attend_type + ": " + self.Lecture.Name + " at " + self.Time

    def new(self, course_type, course, user, time):
        self.Attend_type = course_type
        self.User = user
        self.Time = time
        self.Registration_time = datetime.now()
        if course_type == "LC":
            self.Lecture = course
        else:
            self.Masterclass = course

    def cancel(self):
        if self.Attend_type == "LC":
            self.Lecture.Attends -= 1
            archive = ArchiveRegistration()
            archive.new(self)


class ArchiveRegistration(models.Model, Registration):
    Cancel_time = models.DateTimeField()

    def new(self, data: Registration):
        self.Attend_type = data.Attend_type
        self.Lecture = data.Lecture
        self.Masterclass = data.Masterclass
        self.User = data.User
        self.Time = data.Time
        self.Registration_time = data.Registration_time
        self.Cancel_time = datetime.now()


Ответы (0 шт):