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 は純粋にデータベース関連であり、空白は検証関連です。フィールドに blank=True がある場合、フォームの検証により空の値の入力が許可されます。フィールドが blank=False の場合、そのフィールドは必須になります。

于 2013-08-20T15:46:39.143 に答える
7

最初のステップは、フィールドの説明を次のように変更することです。

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

null=Trueこれはテーブルの作成に関連するディレクティブであり、検証には関連しないため、不十分です。nullblankは別の概念です。一方だけが必要で、もう一方が不要な状況があるためです。

ところで、ほとんどの場合、 adatetimeフィールドは 1 つに圧縮できます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 に答える