代码之家  ›  专栏  ›  技术社区  ›  mpen

“RelatedManager”对象没有属性

  •  26
  • mpen  · 技术社区  · 15 年前

    我有一个这样定义的模型:

    class UserDetail(models.Model):
        user = models.ForeignKey(User, db_index=True, unique=True, related_name='details')
        favourites = models.ManyToManyField(Article, related_name='favourited_by', blank=True)
    

    我正在尝试这样做:

    article = get_object_or_404(Article, pk=id)
    request.user.details.favourites.add(article)
    

    为什么不起作用?

    我得到这个错误:

    “RelatedManager”对象没有“Favorites”属性

    我猜 details 类型不对,但为什么不呢?如何执行这样的查询?

    2 回复  |  直到 9 年前
        1
  •  42
  •   jcdyer Anand S Kumar    15 年前

    当你进入 user.details ,它访问 UserDetail.user 外键。外键本身没有指定 User 只能有一个 UserDetail ,所以Django给你一个 RelatedManager ,您可以像常规的 Manager . 所以你对它做的和你对它做的一样 .objects 管理者。你可以要求 user.details.all() ,请 user.details.filter() ,请 user.details.get() ,依此类推,根据方法和结果,它将为您提供一个查询集、一个对象或一个异常。

        2
  •  9
  •   Alasdair    9 年前

    尝试

    request.user.details.get().favourites.add(article)
    

    这假定该用户已经存在userdetail对象,否则 get() 将引发异常。