2013-08-20 81 views
5

我張貼這樣的休息請求:Django:DateField「該字段不能爲空。」

{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 

我不能完全肯定這個消息是從美國回來。我的模型是否正確定義?我的序列化程序需要額外的工作嗎?

回答

13

如果您希望該字段爲可選字段,請將blank=True參數添加到date字段的定義中。

docs

注意,這不是空不同。 null與純數據庫相關,而空白與驗證相關。如果一個字段的值爲空,則表單驗證將允許輸入一個空值。如果一個字段有空白= False,則該字段將是必需的。

+0

文檔鏈接已損壞。 –

+1

@GeoffreyIrving - 謝謝,更新到更新的版本。 –

1

它看起來像你正在使用一個庫,而該庫又使用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) 
5

的第一步是改變你的現場描述如下所示:

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

null=True是不夠的,因爲,這只是相關的表創建一個指令,而不是驗證。 nullblank是不同的概念,因爲有些情況下你只需要一個而不需要另一個。

順便說一下,在幾乎所有情況下,datetime字段可以壓縮到一個DateTimeField

+0

這可能是其中日期和時間字段無法壓縮的情況之一,所以此設計允許將日期設爲未定期事件。 –

+0

是的,更密切地查看有問題的代碼,我同意。 –

相關問題