如何在我的模型中添加一个条件,根据先前的字段值更改模型字段?
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)
使用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)