使用Django 1.8
我试图通过向后的外键关系得到一个queryset,其中源模型中的一个字段只有一个不同的值。你知道吗
class Franchise(models.Model):
...
class Title(models.Model):
franchise = models.ForeignKey(Franchise, related_name='titles')
genre = models.CharField(max_length=20)
...
所以在这个例子中,我想得到一个所有标题都具有相同类型的特许经营对象的查询集。我可以向特许经营模型添加方法,并生成特许经营id的列表以获取查询集,但这非常慢。你知道吗
class Franchise(models.Model):
...
def get_title_genres(self):
self.titles.values_list('genre', flat=True).distinct()
def is_single_genre(self):
return len(self.get_title_genres()) == 1
franchise_ids = [
franchise.id
for franchise in Franchise.objects.all()
if franchise.is_single_genre()
]
queryset = Franchise.objects.filter(id__in=franchise_ids)
有没有更有效的方法?你知道吗
除非需要一个查询集,否则不需要使用
id__in=franchise_ids
创建第二个查询集。你知道吗您可以使用
prefetch_related
来获取queryset中所有相关的标题,但是您将无法重用get_title_genres
方法,因为values_list(...).distinct()
将触发一个新的SQL查询。你知道吗相关问题 更多 >
编程相关推荐