django - 使 Django Rest Api 用户特定(get_queryset)
问题描述
我想制作一个特定于用户的 Django rest api,以便我在 url 的末尾执行 /username。
楷模:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
age = models.IntegerField()
description = models.CharField(max_length=300)
class Meta:
verbose_name_plural = 'User Profiles'
def __str__(self):
return self.user.username
@receiver(post_save, sender=User)
def create_user_data(sender, update_fields, created, instance, **kwargs):
if created:
user = instance
profile = UserProfile.objects.create(user=user, age=18, description='No Description')
class Notes(models.Model):
note = models.CharField(max_length=1000)
parent_user = models.OneToOneField(UserProfile, blank=True, on_delete=models.CASCADE)
class Meta:
verbose_name_plural = 'Notes'
def __str__(self):
return self.note
序列化器:
class NoteSerializer(serializers.ModelSerializer):
class Meta:
model = Notes
fields = ('id', 'note', 'parent_user')
网址:
router = routers.DefaultRouter()
router.register('notes', views.UserNoteView)
urlpatterns = [
path('', include(router.urls)),
]
意见:
class NoteView(viewsets.ModelViewSet):
http_method_names = ['get', 'post', 'put', 'delete', 'patch']
queryset = Notes.objects.all()
serializer_class = NoteSerializer
class UserNoteView(NoteView):
def get_queryset(self):
return self.request.parent_user.Notes.all()
我的问题是我不能做例如 /William 这是我的用户名和用户配置文件。知道这一点的人必须能够提供帮助!
解决方案
你的笔记model
不正确。更改OneToOneField
为ForeignKey
。你可以改变它如下
class Notes(models.Model):
note = models.CharField(max_length=1000)
parent_user = models.ForeignKey(
UserProfile, blank=True, on_delete=models.CASCADE, related_name="notes")
def __str__(self):
return "{note}".format(note=self.note)
现在,改变你viewset
的如下
class UserNoteView(NoteView):
def get_queryset(self):
return self.request.user.userprofile.notes.all()
# or
return Notes.objects.filter(parent_user__user=self.request.user)
推荐阅读
- javascript - 调用 in_app.js 的函数不会总是在某些时候加载 next.js
- linux - 货物错误:无法为“atk-sys v0.10.0”运行自定义构建命令
- python - 我用 for 循环写了这个等式。有人知道写这个方程的其他形式吗?
- google-calendar-api - 增量同步忽略原始过滤器
- node.js - Node.js Multer req.file 未定义
- javascript - Webpack 5:重新加载/卸载联合模块
- visual-studio-code - 随机人的 GitHub 链接在启动我的 VS Code 时打开
- angularjs - 图表 js 图形未显示在画布上
- python - 为什么 cv2.imread 无法从我的路径文件夹中读取我的所有文件夹?
- reactjs - 如何修复错误类型 void 不可分配给使用 react 和 typescript 的类型?