Django ManyToMany 关系无法访问字段
Django ManyToMany Relationship can't access fields
我有一个使用 User
作为外键两次的列表模型。
第一个对创作者来说是ForeignKey
。第二个是 ManyToManyField
该列表的用户
class TodoList(models.Model):
creator = models.ForeignKey(User, default=1,related_name='created_by')
list_users = models.ManyToManyField(User,related_name='list_users')
title = models.CharField(max_length=120)
slug = models.SlugField(max_length=10, blank=True, null=True)
status = models.SlugField(choices=STATUS_CHOICES, default='active', max_length=10)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
我想做的是:
- 获取列表的用户。
- 获取登录用户的列表。
这是我的 #1 代码:
todolist = get_object_or_404(TodoList, slug=list_slug)
users = todolist.list_users
第一行工作正常。但是当我得到 list_users
它会 return auth.User.None
即使列表有 3 个用户通过管理员添加到它。
这是我的 #2 代码:
user = request.user
user_todo_lists = user.todolist.all()
页面将发送:
AttributeError: 'User' object has no attribute 'todolist'
但是当我将 list_users
重命名为 user
时。它会工作得很好。可能是什么问题?
关于你的第一个问题,你可能想要todolist.list_users.all()
。 (也就是说,你想要 QuerySet
,而不是 Manager
。)
关于你的第二个问题,我不确定你实际上试图得到哪个关系,但在任何一种情况下你都需要使用 related_name
定义的属性。 (即user.created_by.all()
或user.list_users.all()
。)
我有一个使用 User
作为外键两次的列表模型。
第一个对创作者来说是ForeignKey
。第二个是 ManyToManyField
该列表的用户
class TodoList(models.Model):
creator = models.ForeignKey(User, default=1,related_name='created_by')
list_users = models.ManyToManyField(User,related_name='list_users')
title = models.CharField(max_length=120)
slug = models.SlugField(max_length=10, blank=True, null=True)
status = models.SlugField(choices=STATUS_CHOICES, default='active', max_length=10)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
我想做的是:
- 获取列表的用户。
- 获取登录用户的列表。
这是我的 #1 代码:
todolist = get_object_or_404(TodoList, slug=list_slug)
users = todolist.list_users
第一行工作正常。但是当我得到 list_users
它会 return auth.User.None
即使列表有 3 个用户通过管理员添加到它。
这是我的 #2 代码:
user = request.user
user_todo_lists = user.todolist.all()
页面将发送:
AttributeError: 'User' object has no attribute 'todolist'
但是当我将 list_users
重命名为 user
时。它会工作得很好。可能是什么问题?
关于你的第一个问题,你可能想要todolist.list_users.all()
。 (也就是说,你想要 QuerySet
,而不是 Manager
。)
关于你的第二个问题,我不确定你实际上试图得到哪个关系,但在任何一种情况下你都需要使用 related_name
定义的属性。 (即user.created_by.all()
或user.list_users.all()
。)