Mit Django REST Framework ermöglicht ein Standard-ModelSerializer, dass ForeignKey-Modellbeziehungen zugewiesen oder geändert werden, indem eine ID als Integer POST wird.DRF: Einfache Fremdschlüsselzuweisung mit verschachtelten Serialisierern?
Was ist die einfachste Weg, um dieses Verhalten aus einem verschachtelten Serializer zu bekommen?
Hinweis, ich spreche nur über die Zuweisung vorhandener Datenbankobjekte, nicht verschachtelte Erstellung.
Ich habe gehackt in der Vergangenheit um diese weg mit zusätzlichen ‚id‘ Felder in der Serializer und mit benutzerdefinierten create
und update
Methoden, aber dies ist eine solche scheinbar einfachen und häufigen Problem für mich, dass ich neugierig bin ich zu wissen bester Weg.
class Child(models.Model):
name = CharField(max_length=20)
class Parent(models.Model):
name = CharField(max_length=20)
phone_number = models.ForeignKey(PhoneNumber)
child = models.ForeignKey(Child)
class ChildSerializer(ModelSerializer):
class Meta:
model = Child
class ParentSerializer(ModelSerializer):
# phone_number relation is automatic and will accept ID integers
children = ChildSerializer() # this one will not
class Meta:
model = Parent
Kevin Dank. Ich hatte mit dem gleichen Problem zu kämpfen. Ich habe ChildSerializer zwei Felder hinzugefügt. ** parent = ParentSerializer (read_only = True) ** und ** parent_id = serializers.PrimaryKeyRelatedField (...., write_only = True, ....) ** Ich habe auch sowohl ** parent ** als auch ** parent_id hinzugefügt ** zu Feldern des ChildSerializers. Aber ich sehe kein ** child_id ** Feld in der Antwort. Was eigentlich gut und praktisch ist, aber ich frage mich, was ist der Grund dafür? Hast du irgendeine Idee? – hnroot
gute Antwort. nur ein paar Beispielcode wie in Skinny's Antwort (wahrscheinlich unten) fehlt – molecular