【问题标题】:Correct way to set optional Django field to blank?将可选 Django 字段设置为空白的正确方法?
【发布时间】:2017-03-16 06:37:17
【问题描述】:

如果您有一个可选的 Django 模型字段,当用户将表单字段留空时,创建该 Django 对象的正确方法是什么?我有以下模型和表格(顺便说一句,我知道我可以使用 ModelForm):

# models.py
class Club(models.Model):
    hostname = models.CharField(max_length=128)
    co_hostname = models.CharField(max_length=128, null=True, blank=True)

# forms.py
class ClubForm(forms.Form):
    hostname = models.CharField(max_length=128)
    co_hostname = models.CharField(max_length=128, required=False)

如果用户将共同主持人字段留空,我应该在创建对象时输入如下所示的空白吗?我的印象是,如果你在数据库表中插入一个空白,你仍然给它一个你可能不想做的值。处理这种情况的正确方法是什么?谢谢。

# views.py
club = Club.objects.create(
    hostname = form.cleaned_data['hostname'],
    co_hostname = ''
    )

【问题讨论】:

  • 使用null=True,您的字符域现在有两个“空”值:None''。通常建议不要在 charfield 上使用 null=True,除非您出于某种原因需要它(例如唯一索引)。
  • 谢谢。为了其他读者的利益,您的意思在这里解释:docs.djangoproject.com/en/dev/ref/models/fields/#null

标签: django django-models django-forms


【解决方案1】:

您可以将None 作为字段值传递,因为您的字段的属性null 设置为True

所以你可以:

club = Club.objects.create(hostname=form.cleaned_data['hostname'], co_hostname=None)

为了让您的生活更轻松,我还建议您在表单中使用ModelForm,因为您将完全相同的字段从模型复制到表单。

【讨论】:

  • 如果你有blank=True而不是null=True呢?
  • @Boris 使用blank=True,您可以在表单中保留空白字段。所以这个属性与表单验证更相关。例如,您可以将空字符串应用于您的字段,例如 YourModel.objects.create(your_field='')
猜你喜欢
  • 2013-02-19
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多