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 columnDeviceLevelMapping.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

クエリの使用で関係をたどるには__(2 つのアンダースコア)。

あなたの更新から、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」です。

最も簡単な解決策: テーブル device_level_mapping を変更し、id という名前の列を追加します。

于 2013-10-30T07:17:41.387 に答える
0

ForeignKey を照会しているため、リレーションシップをトラバースするには、二重のアンダースコア (またはダンダー) を使用します。__

クエリを次のように変更します

DeviceLevelMapping.objects.filter(level1__id = l_id)
于 2013-10-30T07:09:54.240 に答える