I have two models in my Django Restframework. In my views I want to get all properties and for each property I get Profile data of that user who created it.
How can I achieve this?
example:
#models.py
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
mobile = models.CharField(max_length=200)
location = models.CharField(max_length=200)
class Properties(models.Model):
title = models.CharField(max_length=200)
price = models.CharField(max_length=200)
category = models.CharField(max_length=200)
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
#serializers.py
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = '__all__'
class PropertySerializer(serializers.ModelSerializer):
class Meta:
model = Property
fields = [
'title','price','category','created_by'
]
#views.py
class PropertiesView(generics.ListAPIView):
serializer = PropertySerializer
queryset = Property.objects.all()
CodePudding user response:
Try with :
if you want complete profile data then -
first define the related name in properties model (createby field) like -
class Profile(models.Model):
---
---
class Properties(models.Model):
---
created_by =
models.ForeignKey(User, on_delete=models.CASCADE, related_name = "abc")
and then use related name in serializers and also include it in fields such as -
class PropertySerializer(serializers.ModelSerializer):
abc = ProfileSerializer()
class Meta:
model = Property
fields = [
'title','price','category','created_by', 'abc'
]
and if you want specific profile data then -
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = '__all__'
class PropertySerializer(serializers.ModelSerializer):
mobile = serializers.SerializerMethodField()
class Meta:
model = Property
fields = [
'title','price','category','created_by', "mobile",
]
def get_mobile(self, instance):
return instance.created_by.mobile if instance.created_by else ''
CodePudding user response:
If you want to get profile data in your Properties, check below -
class PropertySerializer(serializers.ModelSerializer):
mobile = serializers.SerializerMethodField()
location = serializers.SerializerMethodField()
class Meta:
model = Property
fields = [
'title','price','category','created_by', "mobile", "location"
]
def get_mobile(self, instance):
return Profile.objects.get(user = instance.created_by).mobile
def get_location(self, instance):
return Profile.objects.get(user = instance.created_by).location
