每当用户没有添加值时,我需要我的Django模型用default
中设置的值替换空的字段。
我的模型看起来像这样:
not_before = models.TimeField(blank=True, null=True, default='00:00:00')
max_num_per_day = models.IntegerField(blank=True, null=True, default=0)
我尝试了null
,blank
和default
的每个组合,但无论我做什么,字段都被null
代替'00:00:00'
并且0
。
无论如何,只要字段为空,我就可以强制它为default
值吗?
答案 0 :(得分:4)
从我对您的问题的理解是您只想将其设置为默认值。您可以使用: https://code.djangoproject.com/ticket/6754
不要not_before = models.TimeField(blank=True, null=True, default='00:00:00')
代替,
import datetime
not_before = models.TimeField(default=datetime.time(0,0))
max_num_per_day = models.IntegerField(default=0)
答案 1 :(得分:2)
您可以使用默认功能设置表单,例如:
class YourForm(forms.Form):
.....
def clean_field(self):
data = self.cleaned_data['not_before']
if not data:
data = '00:00:00'
或在模型中编写一个函数,如:
class Molde(models.Model):
not_before = models.TimeField(blank=True, null=True, default='00:00:00')
def time(self):
if self.not_before:
return self.not_before
else:
return '00:00:00'
在这种情况下,您将调用函数而不是模型字段本身。您还可以查看this。
希望有所帮助。
答案 2 :(得分:0)
您似乎正在使用ModelForm从用户那里获取数据。
在这种情况下,佐助提出的解决方案将无效。首先,您必须在表单字段中将required
参数设置为False
,这样您就可以停止查看“此字段是必填的”消息。但是,在保存表单时,您会看到错误。即使您的模型实例使用默认值进行初始化,表单也会将其替换为None
,因为表单中的现有字段与模型中的字段匹配,其值为None
。
我的解决方案是在保存之前覆盖模型实例中的值:
model_instance = myform.save(commit=False)
if not model_instance.not_before:
model_instance.not_before = '00:00:00'
if not model_instance.max_num_per_day:
model_instance.max_num_per_day = 0
model_instance.save()