'RelatedManager'对象没有属性

时间:2009-12-01 03:49:18

标签: django

我的模型定义如下:

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 个答案:

答案 0 :(得分:42)

访问user.details时,它会访问UserDetail.user外键的反向引用。外键本身并未指定User只能有一个UserDetail,因此django会为您提供RelatedManager,您可以像常规{{1}一样过滤和查询}。因此,您对Manager经理所做的事情也是如此。您可以要求.objectsuser.details.all()user.details.filter()等,这将根据方法和结果为您提供查询集,对象或例外。< / p>

答案 1 :(得分:9)

尝试

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

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