【发布时间】:2014-09-14 01:49:38
【问题描述】:
假设我有一个这样的 Django 模型:
class Person(models.Model):
name = models.CharField(max_length=64, blank=True, null=True)
age = models.IntField(blank=True, null=True)
class Friendship(models.Model):
person1 = models.ForeignKey('Person', related_name="person1")
person2 = models.ForeignKey('Person', related_name="person2”)
对于人 my_guy,我如何有效地找到所有与 my_guy 没有成为友谊的人?
我可以做这样的事情,但必须有一种对数据库更友好和更有效的方法:
friends = []
for friendship in Friendships.objects.filter(Q(person1=my_guy) | Q(person2=my_guy)):
if friendship.person1 == my_guy:
friends.append(friendship.person2)
else:
friends.append(friendship.person1)
non_friends = []
for p in Persons.objects.all():
if p not in friends:
non_friends.append(p)
print non_friends
如果需要,我愿意更改模型,但如果有一种有效的方法可以对现有模型执行此操作,我会喜欢它。
【问题讨论】:
标签: python django django-models django-queryset