如何在具有相似字段值的 django rest 框架中加入两个序列化程序

How can I join two serilaizers in django rest framework that have a similar field value

我的 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()

试试:

如果您想要完整的个人资料数据,那么-

首先在properties model(createby field)中定义相关名称,如-

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