0

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

问题出在哪里?

已编辑

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

4 回答 4

4

在查询中使用关系__(双下划线)。

从您的更新中,该id字段为level1_id,因此应将查询更改为

DeviceLevelMapping.objects.filter(level1__level1_id = l_id)
于 2013-10-30T07:09:18.743 回答
1

正如许多人指出的那样,level1_id应该是level1__id,但这不会引发未知的 columnDeviceLevelMapping.id` 错误。

根据模型的结构和db_table定义,我猜 db 表不是由 Django syncdb 创建的,它是从现有项目迁移的,并且该表没有主键。

Django 模型具有自动主键字段,默认字段名称为 'id'

最简单的解决方案:alter table device_level_mapping,添加一个名为id的列。

于 2013-10-30T07:17:41.387 回答
0

您正在查询 ForeignKey 以便遍历它是双下划线(或 dunders)的关系__

将您的查询更改为

DeviceLevelMapping.objects.filter(level1__id = l_id)
于 2013-10-30T07:09:54.240 回答
0

您的查询应该是这样的:

DeviceLevelMapping.objects.filter(level1__level1_id = l_id)
于 2013-10-30T07:28:56.060 回答