如何在 Django Serializer 中通过用户 ID 检索所有模型数据?

How to retrieve all models data by User id in Django Serializer?

我有以下序列化程序

class UserSerializer(serializers.ModelSerializer):
class Meta:
    model = User
    fields = ['id']


class PersonSerializer(serializers.ModelSerializer):
user = UserSerializer()
comments = CommentSerializer(source='comment_set', many=True)

class Meta:
    model = Person
    fields = '__all__'

及相关浏览量

class PersonRetrieveView(generics.RetrieveAPIView):

    queryset = Person.objects.all()
    serializer_class = PersonSerializer


class UserRetrieveView(generics.RetrieveAPIView):

    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = (permissions.IsAuthenticated, )

模型是标准的,Person 通过外键与 User 相关联。 所以我的 url path('persons/<int:pk>/', PersonRetrieveView.as_view()), returns 带有用户字段和用户 ID 的 Person 对象。我想做一个反向逻辑。通过用户 ID,我想通过用户 ID 查询所有具有字段 person 的用户以及与该用户相关的所有人员。

我做不到

class UserSerializer(serializers.ModelSerializer):
person = PersonSerializer()

class Meta:
    model = User
    fields = ['id']

因为 Person 序列化程序定义在 User 序列化程序之下。有什么方法可以简单地使用泛型吗?

您的 models.py 应如下所示:

class Person(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
               related_name='persons', # This is important
               on_delete=models.CASCADE
           )
    # Other fields...

然后serializers.py:

class PersonSerializer(serializers.ModelSerializer):
    persons=serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Person

有关更多信息或其他关系类型,您可以查看 DRF 文档: https://www.django-rest-framework.org/api-guide/relations/