django 데이터베이스 'RelatedManager'객체에 속성이 없습니다.




django 데이터베이스 (2)

나는 이와 같이 정의 된 모델을 가지고있다 :

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'객체에 '즐겨 찾기'속성이 없습니다.

details 이 올바른 유형이 아닌 것 같지만 왜 그렇지 않습니까? 그런 쿼리를 어떻게 수행 할 수 있습니까?


시험

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

이것은 해당 사용자에 대해 UserDetail 객체가 이미 존재한다고 가정합니다. 그렇지 않으면 get() 이 예외를 발생시킵니다.


user.details 에 액세스하면 UserDetail.user 외래 키의 역 참조를 액세스합니다. 외래 키 자체는 User 가 하나의 UserDetail 만 가질 수 있다고 지정하지 않으므로 django는 일반 Manager 처럼 필터링하고 쿼리 할 수있는 RelatedManager 제공합니다. 그래서 당신은 당신이 당신의 .objects 관리자에게하는 것과 동일한 일을합니다. user.details.all() , user.details.filter() , user.details.get() 등을 요청할 수 있습니다.이 user.details.all() 는 사용자에 따라 user.details.all() , 객체 또는 예외를 제공합니다. 방법 및 결과.