2015-07-14 8 views
5

So come per la documentazione i seguenti campi non tengono allow_blank=True e allow_null=TrueMemorizzazione dei valori predefiniti per BooleanField() e IntegerField() in Django REST

BooleanField() 
IntegerField() 

ho bisogno per consentire al cliente di non specifica go d (come di seguito) e per memorizzare il valore nel DB come None.

g = serializers.BooleanField() 
d = serializers.IntegerField() 

Qualche idea?

+0

C'è qualche altra informazione che desideri in una delle risposte? –

risposta

1

Django Rest Framework Serializer ha initial opzioni per impostare il valore predefinito di un campo.

g = serializers.BooleanField(initial=True) 
d = serializers.IntegerField(initial=0) 

http://www.django-rest-framework.org/api-guide/fields/

+1

Non memorizzerà 'True' e' 0' invece di 'None' come la domanda? – bakkal

+1

Ho provato il tuo suggerimento ma anche se ho impostato su 0 per la d, allora ho ancora un errore. – felix001

4

Le varie opzioni per la gestione di campi vuoti, vuoti e nulli sono (necessariamente) un po 'sottili, quindi è sorprendente che talvolta viaggi gente up.

So come per la documentazione i seguenti campi non tengono allow_blank = True e allow_null = True

Questo è errato:

  • IntegerField(allow_null=True) è valido.
  • Se si desidera consentire input nulli per campi booleani, è necessario utilizzare la classe NullBooleanField().

Si è corretto che nessuno di loro prende allow_blank, in quanto la stringa vuota non sarà un valore valido in entrambi i casi.


ho bisogno di consentire al cliente di non specifica G o D (come da sotto) e per memorizzare il valore nel DB come Nessuno.

È possibile utilizzareIntegerField(default=None) e NullBooleanField(default=None).

In questo caso, quando i valori vengono omessi, verranno inclusi come None in serializer.validated_data. Dovrai assicurarti di utilizzare null=True/NullBooleanField nel campo Modello.

oppureIntegerField(required=False) e NullBooleanField(required=False).

In questo caso, quando i valori vengono omessi, non saranno inclusi in serializer.validated_data e verrà utilizzato il campo del modello predefinito. Dovrai assicurarti di utilizzare default=None e null=True/NullBooleanField nel campo Modello.


Nota che c'era un bug quando si utilizza l'API sfogliabile che i campi vuoti in input HTML did not get the default values set. Questo problema è risolto in the upcoming 3.1.4 release.

L'argomento initial suggerito nella risposta di Edwin può anche essere utile, ma è utile per impostare un valore da rendere inizialmente nei campi modulo HTML.

Problemi correlati