是否可以在Django中使用PositiveIntegerField作为外键?

时间:2013-08-28 22:02:34

标签: python sql django model foreign-keys

考虑以下两个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()

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

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

Information.objects.filter(approved=True)

...除了查询将返回Information的实例,而不是Item中引用的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(通常不是非常便携)的情况下执行此操作?

1 个答案:

答案 0 :(得分: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)