繁体   English   中英

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

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

使用 Django/python。 所以我有一个“食物”model,它接受多个用户输入,其中一个是“类型”,并有“新鲜”和“储藏室”选项。

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

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

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

这是我的 Model。

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 覆盖返回 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM