Django ManyToMany关系无法访问字段

时间:2015-07-09 07:07:12

标签: python django django-orm

我有一个列表模型,它使用User作为外键两次。

第一个是创建者的ForeignKey。对于该列表的用户,第2位为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. 获取用户列表。
  2. 获取登录用户的列表。
  3. 这是我的#1代码:

    todolist = get_object_or_404(TodoList, slug=list_slug)
    users = todolist.list_users
    

    第一行正常。但是,当我收到list_users时,即使该列表通过管理员添加了3个用户,它也将返回auth.User.None

    这是我的#2代码:

    user = request.user
    user_todo_lists = user.todolist.all()
    

    该页面将发送:

      

    AttributeError:'User'对象没有属性'todolist'

    但是当我将list_users重命名为user时。它会工作得很好。可能是什么问题?

1 个答案:

答案 0 :(得分:3)

关于您的第一个问题,您可能需要todolist.list_users.all()。 (也就是说,您需要QuerySet,而不是Manager。)

关于您的第二个问题,我不确定您实际上想要达到哪种关系,但在任何一种情况下,您都需要使用related_name定义的属性。 (即user.created_by.all()user.list_users.all()。)