![](/img/trans.png)
[英]How can I add an auto increment field in a model based on total count of objects with same field value?
[英]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.