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

2024-05-28 21:15:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

{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

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


Tags: eventtruedatetimetitlemodelssomedescription
3条回答

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

如果是这种情况,可以将blank=True添加到DateField以解决问题。

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)

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

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

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

顺便说一下,在几乎所有的情况下,一个date和一个time字段可以压缩成一个DateTimeField

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

docs

Note that this is different than null. null is purely database-related, whereas blank is validation-related. If a field has blank=True, form validation will allow entry of an empty value. If a field has blank=False, the field will be required.

相关问题 更多 >

    热门问题