2013-08-20 15 views
5

sto postando una richiesta di riposo come questo:Django: DateField "Questo campo non può essere vuoto."

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

io non sto passando la data perché l'evento è ricorrente e il valore dovrebbe essere vuoto. La risposta del server è:

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

Ecco il codice Python rilevanti:

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 

io non sono del tutto sicuro dove il messaggio è tornato da. Il mio modello è stato definito correttamente? Ho bisogno di ulteriore lavoro nel mio serializzatore?

risposta

13

Aggiungere il parametro blank=True alla definizione del campo date se si desidera che il campo sia facoltativo.

Dal docs:

Si noti che questo è diverso da null. null è puramente correlato al database, mentre vuoto è correlato alla validazione. Se un campo ha spazio = True, la convalida del modulo consentirà l'inserimento di un valore vuoto. Se un campo è vuoto = Falso, il campo sarà richiesto.

+0

Il collegamento di documenti è interrotto. –

+1

@GeoffreyIrving - grazie, aggiornato a una versione più recente. –

1

Sembra che tu stia utilizzando una libreria che a sua volta utilizza django.forms.ModelForm.

In questo caso, è possibile aggiungere vuoto = True al proprio DateField per risolvere il problema.

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

Il primo passo è quello di cambiare la vostra descrizione campo in questo modo:

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

null=True è insufficiente perché questa è solo una direttiva rilevante per la creazione delle tabelle, non convalida. null e blank sono concetti separati perché ci sono situazioni in cui si desidera solo uno e non l'altro.

A proposito, in quasi tutti i casi un campo date e un campo time può essere compresso in uno DateTimeField.

+0

Questo è probabilmente uno dei casi in cui il campo data e ora non può essere compresso, quindi questo design consente di annullare la data per gli eventi ricorrenti. –

+0

Sì, osservando il codice in questione più da vicino sono d'accordo. –

Problemi correlati