2017-02-17 127 views
1

我的models.py是:查詢的遞歸許多與一至表一對多的關係,Django的

User(models.Model): 
    people = models.ManyToManyField('self', through='Friend', symmetrical=False) 

Friend(models.Model): 
    from_user = models.ForeignKey('User', related_name='friends') 
    to_user = models.ForeignKey('User', related_name='friends_of') 
    accepted = models.BooleanField(default=False) 

要獲得有關user_instance所有Friend對象User實例的queryset的,我正在做像這樣:

user_instance.people.all() | user_instance.user_set.all() 

這個工程,但我想要的只是accepted = True的。喜歡的東西:

user_instance.people.filter(people__accepted=True) | user_instance.user_set.filter(people__accepted=True) 

注:重命名友誼人

感謝

+0

你有沒有嘗試過,看看'user_instance.friendship.filter(friendship__accepted = TRUE)'的作品?我認爲這是做到這一點的正確方法。文檔瀏覽:https://docs.djangoproject.com/en/1.10/topics/db/models/#extra-fields-on-many-to-many-relationships – Mojimi

+0

另外我建議你重命名的友誼的朋友或友誼,它可能會讓你感到困惑,因爲它可以是很多朋友 – Mojimi

+0

感謝Mojimi提供的鏈接和建議。我已經重新命名了模型 – akhilsp

回答

1

試試這個:

user_instance.people.filter(friends_of__accepted=True) | user_instance.user_set.filter(friends__accepted=True) 

的一點是,related_name應該預先考慮到__accepted而不是字段名people