django 如何使用外键定义模型一对多关系

6ju8rftf  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(131)

在下面的代码中,我尝试使用外键连接到表:
models.py

class DailyTestDraft(models.Model):
    index = models.AutoField(db_column='Index', primary_key=True)  # Field name made lowercase.
    gantry = models.IntegerField(db_column='Gantry', null=True)
    '.....'

class DailyTestInput(models.Model):
    index = models.AutoField(db_column='Index', primary_key=True)  # Field name made lowercase.
    energyID = models.IntegerField(db_column='energyID',null=True)
    '.......'
    indexid = models.ForeignKey(DailyTestDraft, on_delete=models.CASCADE, null=True, blank=True,    default=None)  # Field name made lowercase.

views.py:

form = DailyTestDraft(gantry=3)
form.save()
form2 = DailyTestInput(indexid=form)
form2.save()

我希望表DailyTestInputDailyTestDraft的主键(即index)保存到其外键变量indexid中。
但是,我得到了错误:
(1054,"Unknown column 'indexid_id' in 'field list'")"
当我把它改成

form2 = DailyTestInput(indexid_id=form)

我得到错误:
"字段" index "需要一个数字,但得到了。"<DailyTestDraft: 58>."
但当我把它改成

form2 = DailyTestInput(indexid_id=form.index)

然后我得到相同的错误1054。
如果我把

form2 = DailyTestInput(indexid=form.index)

然后我得到错误:
无法分配“58”:"DailyTestInput.indexid"必须是"DailyTestDraft"示例。"
对不起所有的选项,但我一直在努力使它在许多方面的工作,我有点失去了它应该如何实现。

vmdwslir

vmdwslir1#

您的数据库列名与Django的数据库表示不同:
在后台,Django将"_id"附加到字段名以创建其数据库列名。
您可以通过指定db_column来更改此设置:

indexid = models.ForeignKey(..., db_column='indexid')

相关问题