Reputation: 1571
Well, I am trying to follow relationships with Django Rest Framework.
Here is a simplified model :
class Model1(models.Model):
name = models.CharField(max_length=20)
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Model2(models.Model):
title = models.CharField(max_length=12, null=True, blank=True)
model1 = models.ForeignKey(Model1, on_delete=models.CASCADE)
And Serializers :
class Model1Serializer(serializers.ModelSerializer):
class Meta:
model = Model1
fields = '__all__'
class Model2Serializer(serializers.ModelSerializer):
class Meta:
model = Model2
fields = '__all__'
From Model2, I would like to access owner properties, like email...
Without DRF and in a standard template, I would do this :
{{ instanceOfModel2.model1.owner.email }}
This would follow the relationship.
Do you have any idea how could I achieve this using Django DRF?
I looked at https://www.django-rest-framework.org/api-guide/relations/ But what I want is the opposite way... And I'd like to not expose the Django User model through a REST API....
Upvotes: 1
Views: 748
Reputation: 9
If you want the field to be read only
:
class Model2Serializer(serializers.ModelSerializer):
email = serializers.SerializerMethodField()
class Meta:
model = Model2
fields = ('email', ...)
def get_email(self, obj):
return obj.model1.owner.email
Upvotes: 0
Reputation: 401
You must create a User Serializer and relate the serializers with each other.
User = get_user_model()
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
class Model1Serializer(serializers.ModelSerializer):
owner = UserSerializer()
class Meta:
model = Model1
fields = '__all__'
class Model2Serializer(serializers.ModelSerializer):
model1 = Model1Serializer()
class Meta:
model = Model2
fields = '__all__'
Upvotes: 0