Django:选择与ManyToManyField相关的

2024-10-06 17:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有:

class Award(models.Model) :
    name = models.CharField(max_length=100, db_index=True)

class Alias(models.Model) :
    awards = models.ManyToManyField('Award', through='Achiever')

class Achiever(models.Model):
    award = models.ForeignKey(Award)
    alias = models.ForeignKey(Alias)
    count = models.IntegerField(default=1)

我怎么能有一个Alias它的achiever_setawards都是预填充的呢?

>>> db.reset_queries()
>>> Alias.objects.filter(id="450867").select_related("achiever_set__award").get().achiever_set.all()[0].award.name
u'Perma-Peddle'
>>> len(db.connection.queries)
3
>>> db.reset_queries()
>>> Alias.objects.filter(id="450867").select_related("awards").get().awards.all()[0].name
u'Dwarfageddon (10 player)'
>>> len(db.connection.queries)
2

我需要大量访问别名已经获得的奖励(中间表和奖励本身)。我怎么能把这些都分批处理?


Tags: namedbmodelmodelsaliasclassresetset
2条回答

Django 1.4及以上版本有^{}用于此目的。

^{}方法与^{}类似,但不执行数据库联接。相反,它执行额外的数据库查询并在Python中进行连接。

如果您不在Django 1.4上,还有django-batch-select库,它的工作方式基本上与预取相关。

相关问题 更多 >