Django models.ForeignKey与自定义外键的模型问题

时间:2017-07-20 19:10:52

标签: django postgresql django-models

我使用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)

3 个答案:

答案 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)

我不确定问题的原因是什么。我通过删除我的数据库并重新创建它和我的实体来解决它 谢谢大家。