查询的递归许多与一至表一对多的关系,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)
注:重命名友谊人
感谢
答
试试这个:
user_instance.people.filter(friends_of__accepted=True) | user_instance.user_set.filter(friends__accepted=True)
的一点是,related_name
应该预先考虑到__accepted
而不是字段名people
。
你有没有尝试过,看看'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
另外我建议你重命名的友谊的朋友或友谊,它可能会让你感到困惑,因为它可以是很多朋友 – Mojimi
感谢Mojimi提供的链接和建议。我已经重新命名了模型 – akhilsp