2

考虑以下两个 Django 模型:

class Item(models.Model):
    '''
    Represents a single item.
    '''
    title = models.TextField()

class Information(models.Model):
    '''
    Stores information about an item.
    '''
    approved           = models.BooleanField(default=False)
    multipurpose_field = models.PositiveIntegerField()

由于模型的组织方式,我被迫使用PositiveIntegerFieldinInformation来引用 anItem而不是使用ForeignKey. 这使得查询更加困难。

我想选择设置为的Information实例引用的所有项目。换句话说,我想这样做:approvedTrue

Information.objects.filter(approved=True)

...除了查询将返回实例Information而不是Item引用 in multipurpose_field

我可能可以用原始 SQL 做到这一点:

SELECT app_item.title FROM app_item
  LEFT JOIN app_information
  ON app_information.multipurpose_field = app_item.id
  WHERE app_information.approved = 1

有没有办法在不使用原始 SQL(通常不是很便携)的情况下做到这一点?

4

1 回答 1

0

ForeignKey的字段类型由相关字段决定。考虑以这种方式重新设计模型:

class Item(models.Model):
    id    = models.PositiveIntegerField(primary_key=True)
    title = models.TextField()

class Information(models.Model):
    approved           = models.BooleanField(default=False)
    multipurpose_field = models.ForeignKey(Item)

然后您的查询将以这种方式表示:

Item.objects.filter(information__approved=True)
于 2013-08-28T22:12:30.413 回答