我无法查询django模型。
该模型如下。
class DeviceLevelMapping(models.Model):
device = models.ForeignKey(DeviceDetails)
level1 = models.ForeignKey('Level1Detail')
level2 = models.ForeignKey('Level2Detail')
level3 = models.ForeignKey('Level3Detail')
level4 = models.ForeignKey('Level4Detail')
level5 = models.ForeignKey('Level5Detail')
level6 = models.ForeignKey('Level6Detail')
level7 = models.ForeignKey('Level7Detail')
class Meta:
db_table = 'device_level_mapping'
当我触发查询DeviceLevelMapping.objects.filter(level1_id = l_id)
时,它会显示unknown column
DeviceLevelMapping.id`。
问题在哪里?
EDITED
class Level1Detail(models.Model):
level1_id = models.IntegerField(primary_key=True)
level1_name = models.CharField(max_length=256L)
organization = models.ForeignKey('OrganizationDetails')
class Meta:
db_table = 'level1_detail'
答案 0 :(得分:4)
要在查询中使用关联__
(双下划线)。
在您的更新中,id
字段为level1_id
,因此查询应更改为
DeviceLevelMapping.objects.filter(level1__level1_id = l_id)
答案 1 :(得分:1)
正如许多人所指出的那样,level1_id
应该是level1__id
,但这不会引发未知的columnDeviceLevelMapping.id`错误。
基于模型的结构和db_table
定义,我想db表不是由Django syncdb创建的,它是从现有项目迁移的,并且该表没有主键。
Django模型有automatic primary key field,默认字段名称为'id'
最简单的解决方案:alter table device_level_mapping,添加一个名为id的列。
答案 2 :(得分:0)
您正在查询ForeignKey以便遍历它的双下划线(或dunders)__
将您的查询更改为
DeviceLevelMapping.objects.filter(level1__id = l_id)
答案 3 :(得分:0)
您的查询应该是:
DeviceLevelMapping.objects.filter(level1__level1_id = l_id)