我使用Django 1.11,Python 3.6和PostgreSQL 9.6 我按照documentation中的描述定义了两个模型。
class CircDetect(models.Model):
oid = models.AutoField(primary_key=True)
...
class Meta:
db_table = 'circdetect'
class PatientMed(models.Model):
...
circdetect = models.ForeignKey(CircDetect, on_delete=models.CASCADE, to_field='oid')
...
但是当我尝试访问管理网站上的PatientMed对象列表时,我得到一个例外:
/ canreg / editor / patientmed /
的编程错误 栏patient_med.circdetect_id不存在
第1行:......“patient_info”。“id”)INNER JOIN“circdetect”ON(“patient_m ...
” 提示:也许您打算引用“patient_med.circdetect”栏目。
看起来Django试图获得id
的{{1}},其实际名称为circdetect
。
我该怎么做才能解决这个问题?
于21月7日编辑
由于艾哈迈德了如下说明,我有另一种模式,我没有提到。在这种情况下,我不确定它会对错误产生影响,但这就是模型:
oid
PatientMed通过这种方式与PatientInfo联系:
class PatientInfo(models.Model):
...
class Meta:
db_table = 'patient_info'
但它没有任何问题。
我应该说,class PatientMed(models.Model):
info = models.OneToOneField(PatientInfo, on_delete=models.CASCADE, primary_key=True)
...
是一张遗留表,我开始工作时已经在我的数据库中使用过。
EDITED
我使用此代码在管理站点中显示PatientMed对象:
circdetect
EDITED
正如阿拉斯戴尔在下面问我在这里放完全型号。他们没有秘密,但他们很大
class PatientMedAdmin(admin.ModelAdmin):
list_display = (
'info',
...
'circdetect',
...
)
list_per_page = 25
admin.site.register(models.PatientMed, PatientMedAdmin)
答案 0 :(得分:1)
听起来你必须指定db_column
,让Django知道PatientMed
列中列的名称。
class PatientMed(models.Model):
circdetect = models.ForeignKey(CircDetect, on_delete=models.CASCADE, db_column='circdetect', to_field='oid')
答案 1 :(得分:0)
您还没有写出导致错误的指令。但似乎你有另一个名为PatientInfo的表,错误与之相关。
答案 2 :(得分:0)
我不确定问题的原因是什么。我通过删除我的数据库并重新创建它和我的实体来解决它 谢谢大家。