没有主键我无法查询表

时间:2018-08-24 16:07:39

标签: python html django

我正在尝试通过Django中没有Primary Key的模型进行查询。 我需要查询它,以便可以访问它拥有的Foreign keys

我只是尝试执行此atm,甚至无法正常工作:

chars = Characterweapons.objects.all()

print(chars)

例如,如果我将Characterweapons更改为Weapons,则具有主键的表将起作用。

加载页面时出现的错误是:

Exception Value: (1054, "Unknown column 'characterweapons.id' in 'field list'")

这是我的模特

class Characterweapons(models.Model):
    characterid = models.ForeignKey(Characters, models.DO_NOTHING, db_column='CharacterID')  # Field name made lowercase.
    weaponid = models.ForeignKey(Weapons, models.DO_NOTHING, db_column='WeaponID', blank=True, null=True)  # Field name made lowercase.
    categoryid = models.ForeignKey(Category, models.DO_NOTHING, db_column='CategoryID', blank=True, null=True)  # Field name made lowercase.
    quantity = models.IntegerField(db_column='Quantity', blank=True, null=True)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'characterweapons'

    def __str__(self):
        return '%s %s %s %s' % (self.quantity,self.characterid,self.weaponid,self.categoryid)

有人知道吗? 预先感谢!

2 个答案:

答案 0 :(得分:1)

因此,您似乎对现有数据库进行了DBinspect生成此模型。我猜这是失败的,因为Django ORM希望您的表具有主键。 “ id”是Django生成的模型主键字段的默认名称。我怀疑当您尝试致电Characterweapons.objects.all()时,由于某种原因,它试图获取主键字段。

可能有一种解决方法,但是除非您真的知道您对数据库的处理方式,否则我强烈建议您在表上设置主键。

答案 1 :(得分:0)

在这种情况下,我发现的最佳解决方案是执行自己的查询,例如:

fact = MyModelWithoutPK.objects.raw("SELECT * FROM my_model_without_pk WHERE my_search=some_search")

这样,您无需实现或添加其他中间件。 在Django docs

中查看更多信息