考虑以下两个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(通常不是非常便携)的情况下执行此操作?
答案 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)