django - 如何使用 django rest 框架检索用户创建的所有项目
问题描述
我试图只获取属于特定用户的课程,下面我有我用来尝试实现这一目标的模型、序列化程序和视图。如果我从视图中删除整个 get_queryset 函数,则 api 将返回相应的用户以及每个用户创建的每门课程。如果 get_queryset 仍然存在,则 api 始终返回未找到用户并仍然提供所有存在的课程。谁能指出我如何才能达到我想要的结果。
看法:
class UserDetail(generics.RetrieveUpdateDestroyAPIView):
permission_classes = [IsProfileOwnerOrReadOnly]
# queryset = User.objects.all()
serializer_class = UserSerializer
def get_queryset(self):
user = self.request.user
queryset = User.objects.all()
if user is not None:
queryset = queryset.filter(courses__owner_id=user.id)
return queryset
串行器
class UserSerializer(serializers.ModelSerializer):
courses = serializers.PrimaryKeyRelatedField(
many=True, queryset=Course.objects.all())
class Meta:
model = User
fields = ['id', 'username', 'courses']
模型
class Course (models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
pub_date = models.DateField(default=date.today)
owner = models.ForeignKey('auth.User', related_name='courses', on_delete=models.CASCADE)
def __str__(self):
return self.title
解决方案
您需要按用户过滤对象
class CreatePostsView(viewsets.ModelViewSet):
model = Post
serializer_class = PostsSerializer
def get_queryset(self):
user = self.request.user
return Post.objects.filter(owner=user)
推荐阅读
- python - 如何在实用程序节点之间获取属性的动画曲线?
- javascript - Redux - 调度动作(onClick 事件)
- karate - 空手道中的 Swtich 浏览器
- vue.js - Vue 将组件 1 中的数据传递给组件 2 中的方法
- flutter - 在将数据从 API 加载到 Flutter 中的 ListView 时加载微调器
- r - 如何根据值和积分该值的微积分结果填充新数据框?
- typescript - TypeScript 不推断特定类型
- javascript - onClick 不一致
- android - SQLite:消除后创建新项目时的 ID 错误
- salesforce-lightning - Salesforce - Aura 组件发布使用消息服务问题