Python Django:已验证用户的相关对象
在Django中,我们可以创建相关模型:Python Django:已验证用户的相关对象,python,django,django-queryset,Python,Django,Django Queryset,在Django中,我们可以创建相关模型: class User(models.Model): pass class TaskSet(models.Model): user = models.ForeignKey(User, related_name='tasksets') title = models.Charfield() class Task(models.Model): user = models.ForeignKey(User, related_nam
class User(models.Model):
pass
class TaskSet(models.Model):
user = models.ForeignKey(User, related_name='tasksets')
title = models.Charfield()
class Task(models.Model):
user = models.ForeignKey(User, related_name='tasks')
taskset = models.ForeignKey(TaskSet, related_name='tasks')
有道理,我可以调用request.user.tasksets
——但在任务集中获取任务的正确方法是什么request.user.tasksets.first().tasks
将返回整个任务集的所有任务–但如何仅为该用户获取任务?您可以调用.filter()
。因此,整个查询将是request.user.tasksets.first().tasks.filter(user=request.user)
。但是,仅当您希望仅从用户的第一个任务集中获取任务时,此结构才有用,并且只有当每个任务集中定义的任务可以属于除任务集所有者之外的其他用户时,此结构才有效
如果您只想获取属于该用户的任务,而不管它是否在第一个任务集中,您可以执行
request.user.tasks.first()
这通常是有效的–我没有指定(但应该有)的是,我是从DRF序列化程序执行此操作的:所以我尝试执行类似于tasks=TaskSerializer的操作(read_only=True,many=True,source='tasks')
是的,您可以这样做。完全按照您在本评论中所写的方式定义它应该只返回属于该用户的任务(无论它们在哪个任务集中)。但是,如果希望序列化程序中的tasks
仅包含该用户的第一个任务集中的属于该用户的任务。请添加一个tasks\u from\u first\u task\u set()
方法,并从用户模型内部返回查询。然后,不要使用任务
作为源,而是使用tasks\u from\u first\u task\u set
。