Как я могу объединить два серила в 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
Вернуться на верх