小编Fré*_*ton的帖子

Django ORM:选择相关集

说我有2个型号:

class Poll(models.Model):
    category = models.CharField(u"Category", max_length = 64)
    [...]

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    [...]
Run Code Online (Sandbox Code Playgroud)

给定一个Poll对象,我可以用以下方式查询其选择:

poll.choice_set.all()
Run Code Online (Sandbox Code Playgroud)

但是,是否有一个实用程序函数来查询一组Poll中的所有选项?

实际上,我正在寻找类似下面的东西(不支持,我不寻求它是如何):

polls = Poll.objects.filter(category = 'foo').select_related('choice_set')
for poll in polls:
    print poll.choice_set.all() # this shouldn't perform a SQL query at each iteration
Run Code Online (Sandbox Code Playgroud)

我做了一个(丑陋的)功能来帮助我实现这个目标:

def qbind(objects, target_name, model, field_name):
    objects = list(objects)
    objects_dict = dict([(object.id, object) for object in objects])
    for foreign in model.objects.filter(**{field_name + '__in': objects_dict.keys()}):
        id = getattr(foreign, field_name + '_id')
        if id in objects_dict:
            object = objects_dict[id]
            if hasattr(object, …
Run Code Online (Sandbox Code Playgroud)

python django orm

18
推荐指数
3
解决办法
2万
查看次数

标签 统计

django ×1

orm ×1

python ×1