当Django models字段为空时,将value设置为Default值

时间:2017-07-05 22:17:07

标签: python django django-models

每当用户没有添加值时,我需要我的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)

我尝试了nullblankdefault的每个组合,但无论我做什么,字段都被null代替'00:00:00'并且0

无论如何,只要字段为空,我就可以强制它为default值吗?

3 个答案:

答案 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()