Django:DateField“此字段不能为空。”

时间:2013-08-20 15:43:09

标签: python django

我正在发布这样的休息请求:

{title:some title, recurring:true, day:Wednesday, time:12:30, description:some text}

我没有传递日期,因为事件是重复出现的,而且值应为空。服务器响应是:

{"date": ["This field cannot be blank."]}

以下是相关的python代码:

class Event(models.Model):
    title = models.CharField(max_length=200)
    recurring = models.BooleanField()
    day = models.CharField(max_length=20, blank=True)
    date = models.DateField(null=True)
    time = models.TimeField()
    description = models.CharField(max_length=500)
    venue = models.CharField(max_length=200, blank=True)
    venueAddress = models.CharField(max_length=200, blank=True)
    venueCity = models.CharField(max_length=200, blank=True)

class EventSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Event

class EventViewSet(viewsets.ModelViewSet):
    queryset = Event.objects.all()
    serializer_class = EventSerializer

我不完全确定消息的回传位置。我的模型定义正确吗?我的序列化工具中是否需要额外的工作?

3 个答案:

答案 0 :(得分:13)

如果您希望该字段为可选字段,请将blank=True参数添加到date字段的定义中。

来自docs

  

请注意,这与null不同。 null纯粹与数据库相关,而blank与验证相关。如果字段为空= True,则表单验证将允许输入空值。如果字段为空= False,则需要该字段。

答案 1 :(得分:5)

第一步是更改字段描述,如下所示:

date = models.DateField(null=True, blank=True)

null=True是不够的,因为这只是与表创建相关的指令,而不是验证。 nullblank是不同的概念,因为在某些情况下您只需要一个而不是另一个。

顺便说一句,在几乎所有情况下,datetime字段都可以压缩为一个DateTimeField

答案 2 :(得分:1)

看起来您正在使用的库反过来使用django.forms.ModelForm

如果是这种情况,您可以在DateField中添加blank = True来解决问题。

class Event(models.Model):
    title = models.CharField(max_length=200)
    recurring = models.BooleanField()
    day = models.CharField(max_length=20, blank=True)
    date = models.DateField(null=True, blank=True)
    time = models.TimeField()
    description = models.CharField(max_length=500)
    venue = models.CharField(max_length=200, blank=True)
    venueAddress = models.CharField(max_length=200, blank=True)
    venueCity = models.CharField(max_length=200, blank=True)