10

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

{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

我不完全确定消息来自哪里。我的模型定义正确吗?我的序列化程序需要额外的工作吗?

4

3 回答 3

19

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

文档

请注意,这与 null 不同。null 纯粹与数据库相关,而空白与验证相关。如果一个字段有空白=真,表单验证将允许输入一个空值。如果某个字段的空白=False,则该字段将是必需的。

于 2013-08-20T15:46:39.143 回答
7

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

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

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

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

于 2013-08-20T15:47:24.143 回答
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)
于 2013-08-20T15:46:45.640 回答