2013-08-20 36 views
5

私はこのような残りの要求を掲示しています:Django:DateField "このフィールドを空白にすることはできません。"

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

イベントが再発され、値が空でなければなりませんので、私は日付を渡していません。サーバーの応答は次のとおりです。

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 

メッセージが戻ってどこから来ている私は完全にわからない:ここでは

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

は、関連するPythonコードです。私のモデルは正しく定義されていますか?シリアライザで余分な作業が必要ですか?

答えて

13

dateフィールドの定義に、このフィールドをオプションにする場合は、blank=Trueパラメータを追加します。 docsから

:これがnullとは異なることに

注意。 nullは純粋にデータベース関連ですが、空白は検証に関連しています。フィールドにblank = Trueが指定されていると、フォームの検証によって空の値が入力されます。フィールドに空白= 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は、別の概念ではなく、一方のみを必要とする状況があるため、別の概念です。

ちなみにほとんどの場合、dateフィールドとtimeフィールドは1つに圧縮できますDateTimeField

+0

これはおそらく、日付と時刻のフィールドを圧縮できないケースの1つで、この設計では、定期的なイベントに対して日付を設定解除することができます。 –

+0

はい、問題のコードをより詳細に見ると私は同意します。 –

関連する問題