2016-05-20 15 views
0

Ich habe einen Serializer, die eine Liste von Strings empfängt und sendet. Diese Zeichenfolgen sind intern Modellinstanzen.Benutzerdefinierte Verwandte Feld

Im Serialisierer, wenn ich eine neue types Liste erhalte, muss ich prüfen, ob der Typ existiert, wenn vorhanden, assoziiere es mit dem anderen Modell andernfalls erstelle eine neue Instanz und assoziiere sie.

Ich kann es eine benutzerdefinierte mit RelatedField

class TypeRelatedField(serializers.StringRelatedField): 
    def to_internal_value(self, data): 
     try: 
      return Type.objects.get(name=data) 
     except Type.DoesNotExist: 
      return Type.objects.create(name=data) 

und in dem Serializer, die die Typen Liste

types = TypeRelatedField(many=True, required=False) 

, so dass, wenn der Typ es, erstellt sonst zurückgegeben wird existiert erhalten. Ich bin mir nicht sicher, ob es der richtige Ort ist, dies zu tun, vielleicht sollte ich tue dies in der create und update Methode?

Antwort

0

Wenn es funktioniert und nichts anderes bricht, dann ist es eine richtige Sache zu tun;) Wenn Sie dies tun alle Methoden, die Modell manipulieren (erstellen, aktualisieren), dann ist es wahrscheinlich am besten, es hier zu tun , aus TROCKENEN Gründen. Wenn nicht, tun Sie es in create oder update. Aber wenn du es zum Beispiel nur auf create brauchst, solltest du es in create schreiben, wenn nur in update, dann sollte es dort hingehen.

Verwandte Themen