我的模型定义如下:
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
不是正确的类型,但为什么不呢?我该如何执行这样的查询?
答案 0 :(得分:42)
访问user.details
时,它会访问UserDetail.user
外键的反向引用。外键本身并未指定User
只能有一个UserDetail
,因此django会为您提供RelatedManager
,您可以像常规{{1}一样过滤和查询}。因此,您对Manager
经理所做的事情也是如此。您可以要求.objects
,user.details.all()
,user.details.filter()
等,这将根据方法和结果为您提供查询集,对象或例外。< / p>
答案 1 :(得分:9)
尝试
request.user.details.get().favourites.add(article)
这假设该用户已存在UserDetail对象,否则get()
将引发异常。