Django模型id问题

时间:2013-10-30 07:07:56

标签: python django django-models

我无法查询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'

4 个答案:

答案 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)