Christoffer Karlsson
Christoffer Karlsson

Reputation: 4943

Django Rest Framework - How to get field of foreign key of a foreign key

Assume I have these models:

ModelA(models.Model):
    some_field_a = models.IntegerField()

ModelB(models.Model):
    some_field_b = models.IntegerField()
    a = models.ForeignKey(ModelA)

ModelC(models.Model):
    some_field_c = models.IntegerField()
    b = models.ForeignKey(ModelB)

Then in my serializer for ModelC, I have this to access the field some_field_b from ModelB:

class ModelCSerializer(serializers.ModelSerializer):
    field_b = serializers.SlugRelatedField(
        read_only=True,
        source='some_field_b',
        slug_field='some_field_b')

    field_a = ???

    class Meta:
        model = ModelC
        fields = ('some_field_c', 'field_b', 'field_a')

But what should I add to field_a to retrieve the value of some_field_a, in the same way I'm retrieving the value from some_field_b?

Upvotes: 3

Views: 1160

Answers (1)

Mark Galloway
Mark Galloway

Reputation: 4141

Not sure if I understand your example, but it seems you wish to walk the relation from C -> B -> A and get that value. You can follow the relation in the source argument using dot syntax, much like you would if you were accessing the object directly.

class ModelCSerializer(serializers.ModelSerializer):
    field_b = serializers.SlugRelatedField(
        read_only=True,
        source='b.some_field_b',
        slug_field='some_field_b')

    field_a = serializers.SlugRelatedField(
        read_only=True,
        source='b.a.some_field_a',
        slug_field='some_field_a')

    class Meta:
        model = ModelC
        fields = ('some_field_c', 'field_b', 'field_a')

Upvotes: 4

Related Questions