Улучшение кода модели 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()