Как установить значение по умолчанию поля модели на другое поле того же режима в 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)
Вернуться на верх