我正在发布这样的休息请求:
{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
我不完全确定消息的回传位置。我的模型定义正确吗?我的序列化工具中是否需要额外的工作?
答案 0 :(得分:13)
如果您希望该字段为可选字段,请将blank=True
参数添加到date
字段的定义中。
来自docs:
请注意,这与null不同。 null纯粹与数据库相关,而blank与验证相关。如果字段为空= True,则表单验证将允许输入空值。如果字段为空= False,则需要该字段。
答案 1 :(得分:5)
第一步是更改字段描述,如下所示:
date = models.DateField(null=True, blank=True)
null=True
是不够的,因为这只是与表创建相关的指令,而不是验证。 null
和blank
是不同的概念,因为在某些情况下您只需要一个而不是另一个。
顺便说一句,在几乎所有情况下,date
和time
字段都可以压缩为一个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)