Sono nuovo di DRF e ho appena iniziato a creare un'API. Ho due modelli, un modello figlio collegato a un modello padre con una chiave esterna. Ecco la versione semplificata del modello che ho:Rapporti Serializer del resto di Django Rest: Come ottenere l'elenco di tutti gli oggetti figlio nel serializzatore del genitore?
class Parent(models.Model):
name = models.CharField(max_length=50)
class Child(models.Model):
parent = models.ForeignKey(Parent)
child_name = models.CharField(max_length=80)
Per creare serializzatori, ho seguito il DRF Serializer Relations e li ho creato come il seguente:
class ChildSerializer(serializers.HyperlinkedModelSerializer):
parent_id = serializers.PrimaryKeyRelatedField(queryset=Parent.objects.all(),source='parent.id')
class Meta:
model = Child
fields = ('url','id','child_name','parent_id')
def create(self, validated_data):
subject = Child.objects.create(parent=validated_data['parent']['id'], child_name=validated_data['child_name'])
return child
class ParentSerializer(serializers.HyperlinkedModelSerializer):
children = ChildSerializer(many=True, read_only=True)
class Meta:
model = Course
fields = ('url','id','name','children')
Sto cercando di ottenere il elenco di tutti i bambini nel serializzatore del genitore. Quello che voglio è essere in grado di ottenere una risposta del genere:
{
'url': 'https://dummyapidomain.com/parents/1/',
'id': '1',
'name': 'Dummy Parent Name',
'cildren': [
{'id': 1, 'child_name': 'Dummy Children I'},
{'id': 2, 'child_name': 'Dummy Children II'},
{'id': 3, 'child_name': 'Dummy Children III'},
...
],
}
non mi aspettavo questo a lavorare poiché non v'è alcun legame tra genitore e figlio nel modello Parent, but it is the suggested way to do it in the documentation, e non ha fatto lavoro.
sto ottenendo il seguente messaggio di errore:
Got AttributeError when attempting to get a value for field `children` on serializer `ParentSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Parent` instance.
Original exception text was: 'Parent' object has no attribute 'children'.
Penso che sia perfettamente ragionevole, ma non riuscivo a capire cosa mi manca qui.
Come posso ottenere l'elenco di tutti i bambini nel serializzatore del genitore?
Credo che il nome correlato per una relazione all'indietro sia impostato su '{field_name} _set', quindi in questo caso' children_set'. Dovresti riuscire a sostituire 'children' con' children_set' nel tuo 'ParentSerializer' – jnishiyama