如何在 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/
我有以下序列化程序
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/