I have a model defined like this:
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)
And I'm trying to do something like this:
article = get_object_or_404(Article, pk=id)
request.user.details.favourites.add(article)
Why isn't it working?
I'm getting this error:
'RelatedManager' object has no attribute 'favourites'
I guess details
isn't the right type, but why isn't it? And how can I perform a query like that?
When you access
user.details
, it accesses the backreference of theUserDetail.user
foreign key. The foreign Key itself doesn't specify that aUser
can only have oneUserDetail
, so django gives you aRelatedManager
, which you can filter and query just like a regularManager
. So you do the same things to it that you do to your.objects
managers. You can ask foruser.details.all()
,user.details.filter()
,user.details.get()
, and so on, which will either give you a queryset, an object, or an exception,depending on the method and the results.Try
This assumes the UserDetail object already exists for that user, otherwise
get()
will raise an exception.