如何在我的模型中添加一个条件,根据先前的字段值更改模型字段?

How can I add a conditional within my model that changes a model field based on a previous fields value?

使用Django/python。所以我有一个接受多个用户输入的 'food' 模型,其中之一是 'type' 并且具有 'fresh' 和 'pantry' 的选项。

另一个是表示到期日期的 DateField。

我想要的是,当用户在类型字段中选择 'fresh' 时,我希望默认日期为今天 + 3 天。

如果用户选择食品储藏室,那么我想使用用户输入我的食物模型的日期。

这是我的模型。

TYPE = (
    ('Fresh Produce', 'Fresh'),
    ('Pantry', 'Pantry')
)

OPTION = (
    ('P', 'Pick-Up'),
    ('D', 'Delivery')
)

class Grub(models.Model):
    item =  models.CharField(
        max_length=50,
        blank = True,
        null = True
       )
    type = models.CharField(
        max_length = 50,
        choices = TYPE,
        default= TYPE[0][0]
        )
    exp = models.DateField(
        'exp date',
         blank = True,
         null = True
        )
   
    desc =  models.TextField(
        max_length=250,
         blank = True,
         null = True
         )
    price = models.IntegerField(
         blank = True,
         null = True
        )
    option = models.CharField(
        max_length=1,
        choices=OPTION,
        default=OPTION[0][0]
        )
    location = models.CharField(
        max_length=200,
         blank = True,
         null = True
        )
    user = models.ForeignKey(User,  on_delete=models.CASCADE)
    url = models.FileField(
        max_length=200,
        blank = True,
        null = True
        )

    
    def __str__(self):
       return self.item
   

    def get_absolute_url(self):
        return reverse('detail', kwargs={'grub_id': self.id})

这有点像我的想法,但我不确定将它放在哪里或如何实现它。

if type == 'Fresh':
   exp == Date.now() + timedelta(days=3)

这是我的 form_valid 方法,我想覆盖它。

def form_valid(self, form):
        form.instance.user = self.request.user
        if form.instance.type == 'Fresh':
            form.instance/exp == Date.now()+timedelta(days=3)
        super().form_valid(form)

尝试用类似这样的方法覆盖保存方法

def save(self, *args, **kwargs):
    if not self.exp:
        if self.type == 'Fresh':
            self.exp = Date.now()+timedelta(days=3)
    super().save(*args, **kwargs)

只需验证 Date.now() 是否正确定义

或 form_valid 覆盖 return super.form_valid(form)

def form_valid(self, form):
    form.instance.user = self.request.user
    if form.instance.type == 'Fresh':
        form.instance/exp == Date.now()+timedelta(days=3)
    return super().form_valid(form)