Как я могу объединить два серила в django rest framework, которые имеют одинаковое значение поля
У меня есть две модели в моем Django Restframework. В моих представлениях я хочу получить все свойства и для каждого свойства получить данные профиля того пользователя, который его создал.
Как я могу этого достичь?
пример:
#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()
Попробуйте с :
если вам нужны полные данные профиля, то -
сначала определите связанное имя в модели свойств (поле createby), как -
class Profile(models.Model):
---
---
class Properties(models.Model):
---
created_by =
models.ForeignKey(User, on_delete=models.CASCADE, related_name = "abc")
и затем использовать связанное имя в сериализаторах, а также включать его в такие поля, как -
class PropertySerializer(serializers.ModelSerializer):
abc = ProfileSerializer()
class Meta:
model = Property
fields = [
'title','price','category','created_by', 'abc'
]
а если вам нужны конкретные данные профиля, то -
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 ''
Если вы хотите получить данные профиля в Свойствах, проверьте ниже -
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