2016-06-29 5 views
0

zunächst lassen Sie mich die Situation erklären. Ich habe ein Modell, das im Grunde einen Titel und eine TextField- hat, die eine json sparen:Django - Modell und Serialisierer Klasse, der beste Weg zu tun

class Content(UUIDObject): 
    title = models.CharField(_(u"Title"), max_length=300) 
    custom_fields_json = models.TextField(_(u"Settings")) 

dieses json zu erstellen, muß ich eine Serializer-Klasse verwenden, von django Rest Rahmen. Diese Klasse hat keine Verbindung zu einem Modell.

class ConfigSerializer(serializers.Serializer): 
    provider = serializers.CharField(write_only=True, required=True) 
    provider_id = serializers.CharField(write_only=True, required=True) 

Die Klasse oben muss der Benutzer ein Formular bieten verwendet werden, damit er title (von Content-Modell) füllen kann, provider und provider_id. Der resultierende Json aus der Serializer-Klasse wird unter custom_fields_json gespeichert. Die Serializer-Klasse, die in dynamic verwendet wird, und ich habe die Logik, um sie ordnungsgemäß wiederzugeben.

Zur Zeit habe ich eine Create/UpdateView und Anpassung des Codes von this guide kann ich das Formular mit allen Feldern machen .. aber dann kann ich einfach nicht die json aus dem Serializer, etc ...

Ich fange an zu denken, dass dies der falsche Weg ist. Ich würde gerne Leute mit mehr Erfahrung fragen, ob es einen besseren Weg gibt, und was wäre es.

Dank

Antwort

0

Verwenden der ModelSerializer:

class ConfigSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Content 
     fields = ('title', 'custom_fields_json') 

Der Serializer Sie können eine dict geben. Lesen Sie auch über ModelViewSets im django Rest Framework, sie können Ihren Code signifikant minimieren.

+0

Vielen Dank für Ihre Antwort, aber wie füge ich die zusätzlichen Felder der Serializer-Klasse, die zum Füllen der custom_fields_json verwendet wird? –

+0

Sie meinen beim Speichern? Sie können in Ihrem Serializer eine Methode validate_ hinzufügen. Es wird ausgeführt, wenn Sie die Felder übergeben, um die Tabelle (Modell) aufzufüllen. Sie können also das Dict, das Sie übergeben, in dieser Methode in ein JSON umwandeln. Ich kann mich irren, also nur um sicher zu gehen, überprüfen Sie diese http://www.django-rest-framework.org/api-guide/serializers/#field-level-validation – alexpeits

+0

OK. Diese Serialisierungsklasse, die custom_fields_json füllt, kann ich nichts hinzufügen. Es stammt von einem anderen Modul einer anderen Firma. Ich kann nur auf .is_valid zählen. Ich meine, diese Klasse zum Formular hinzufügen und die Werte, die der Benutzer gefüllt hat, erhalten –