查询的递归许多与一至表一对多的关系,Django的

问题描述:

我的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

试试这个:

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

的一点是,related_name应该预先考虑到__accepted而不是字段名people