Как установить значение по умолчанию поля модели на другое поле того же режима в django
Я создал модель Student в проекте django с полями "enrollmentdate" и "paymentdate", теперь мне нужно сохранить "paymentdate" как значение по умолчанию в "enrollmentdate"
мой код модели выглядит следующим образом,
> ```
class Student(models.Model):
fname = models.CharField(max_length=100)
lname = models.CharField(max_length=100)
email = models.CharField(max_length=100)
password=models.CharField(max_length=100)
contactno = models.CharField(max_length=100)
address = models.TextField()
grade=models.CharField(max_length=100)
enrollmentstartdate=models.DateField()
enrollmentenddate=models.DateField()
daysremaining=models.IntegerField()
feespaid=models.DecimalField(max_digits=6, decimal_places=2)
paymentdate=models.DateField()
> ```
как я могу это сделать?
Заранее спасибо
Я пытался
entrollmentdate=models.DateField(default=paymentdate)
но не работает
Вы можете добиться этого, переопределив метод save() вашей модели.
class Student(models.Model):
fname = models.CharField(max_length=100)
lname = models.CharField(max_length=100)
email = models.CharField(max_length=100)
password = models.CharField(max_length=100)
contactno = models.CharField(max_length=100)
address = models.TextField()
grade = models.CharField(max_length=100)
enrollmentstartdate = models.DateField()
enrollmentenddate = models.DateField()
daysremaining = models.IntegerField()
feespaid = models.DecimalField(max_digits=6, decimal_places=2)
paymentdate = models.DateField()
def save(self, *args, **kwargs):
if not self.enrollmentstartdate:
self.enrollmentstartdate = self.paymentdate
super(Student, self).save(*args, **kwargs)
Когда вы сохраняете объект Student и не указываете дату начала зачисления, по умолчанию будет использоваться значение paymentdate.
Вы можете добавить переопределение функции сохранения в вашей модели если вы не добавили дату зачисления, функция добавит дату оплаты :
class Student(models.Model):
fname = models.CharField(max_length=100)
lname = models.CharField(max_length=100)
email = models.CharField(max_length=100)
password = models.CharField(max_length=100)
contactno = models.CharField(max_length=100)
address = models.TextField()
grade = models.CharField(max_length=100)
enrollmentstartdate = models.DateField()
enrollmentenddate = models.DateField()
daysremaining = models.IntegerField()
feespaid = models.DecimalField(max_digits=6, decimal_places=2)
paymentdate = models.DateField()
def save(self, *args, **kwargs):
if not self.enrollmentstartdate:
self.enrollmentstartdate = self.paymentdate
super(Student, self).save(*args, **kwargs)
Вы можете добавить переопределение функции сохранения в вашей модели, если вы не добавили enrollmentsdate вручную, функция добавит paymentdate и не забудьте сделать enrollmentdate и enrollmentstartdate null=True, blank=True:
import datetime
class Student(models.Model):
fname = models.CharField(max_length=100)
lname = models.CharField(max_length=100)
email = models.CharField(max_length=100)
password = models.CharField(max_length=100)
contactno = models.CharField(max_length=100)
address = models.TextField()
grade = models.CharField(max_length=100)
enrollmentstartdate = models.DateField(null=True, blank=True)
enrollmentenddate = models.DateField(null=True, blank=True)
daysremaining = models.IntegerField()
feespaid = models.DecimalField(max_digits=6, decimal_places=2)
paymentdate = models.DateField()
def save(self, *args, **kwargs):
if not self.enrollmentstartdate:
self.enrollmentstartdate = self.paymentdate
if not self. entrollmentenddate :
self.entrollmentenddate = entrollmentstartdate + datetime.timedelta(days=365)
super(Student, self).save(*args, **kwargs)