2016-06-02 14 views
0

Nun, ich habe dieses Modell:Django-Rest-Framework POST-Operation: Felder, die nicht leer ist, aber DRF sagt erforderlich ist

class Application(models.Model): 
    name = models.CharField("nom", unique=True, max_length=255) 
    sonarQube_URL = models.CharField("Url SonarQube", max_length=255, 
           blank=True, null=True) 

    def __unicode__(self): 
     return self.name 

und diesen Serializer:

class ApplicationSerializer(serializers.ModelSerializer): 
    nom = serializers.CharField(source='name', required=True, allow_blank=True) 
    url_sonarqube = serializers.CharField(source='sonarQube_URL', required=False) 
    flows = FlowSerializer(many=True, read_only=True) 

    class Meta: 
     model = Application 
     fields = ('id', 'nom', 'url_sonarqube', 'flows') 

Meine Ansicht ist einfach:

class ApplicationViewSet(viewsets.ModelViewSet): 
    queryset = Application.objects.all() 
    serializer_class = ApplicationSerializer 

Ich benutze dieses Modell von Berechtigungen in meinem settings.py:

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.DjangoModelPermissions',), 
    'PAGE_SIZE': 10, 
    'TEST_REQUEST_DEFAULT_FORMAT': 'json', 
    'TEST_REQUEST_RENDERER_CLASSES': (
    'rest_framework.renderers.MultiPartRenderer', 
    'rest_framework.renderers.JSONRenderer', 
    'rest_framework.renderers.TemplateHTMLRenderer' 
    ) 
} 

Wenn ich POST-Operation verwenden, um auf DRF-Schnittstelle (in HTML-Form), ich alle Felder der Anwendung Artikel gefüllt. Wie Sie sehen können, wird der Parameter "required" von "nom" auf True gesetzt. Und das ist das Problem: Auch wenn 'nom' nicht leer ist, sagt DRF "Dieses Feld ist erforderlich!". Daher kann ich keinen neuen Anwendungsposten hochladen. Ich verstehe nicht, warum es nicht funktioniert ... Wo ist der Fehler?

Antwort

1

Der Fehler, den Sie haben, hängt mit der Django Model(Application) zusammen. Es war in Modell-Ebene nicht in Serialisierungsebene fehlgeschlagen. Add null=True und blank=True zu name Feld in Application Modell.

1

Versuchen Sie den Code in Englisch zu halten, können Sie Djangos i18n verwenden Sachen zu übersetzen, auch leer und null für Ihr Namensfeld verwenden:

class Application(models.Model): 
    name = models.CharField(_('name'), max_length=255, blank=True, null=True) 
    sonarqube_url = models.CharField(_('SonarQube URL'), max_length=255, blank=True, null=True) 

    def __unicode__(self): 
     return self.name 


class ApplicationSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Application 
     fields = ('id', 'name', 'sonarqube_url') 

den Strom für später speichern lassen, wie Sie nicht einmal haben eine Modellbeziehung für sie.

Verwandte Themen