django中的外键关系错误

时间:2014-09-04 20:31:00

标签: django django-models django-views

我正在开发一个使用旧数据库的django应用程序。此数据库在任何表中都没有主键或约束。这是我的两个模特

class Provider(models.Model):
    id_provider = models.IntegerField(blank=True, null=True, primary_key=True)
    name = models.CharField(max_length=50, blank=True)
    type = models.CharField(max_length=10, blank=True)
    signed = models.CharField(max_length=15, blank=True)
    currency = models.CharField(max_length=1, blank=True)
    class Meta:
        managed = False
        db_table = 'mpc_proveedores'

class Master(models.Model):
    id_provider = models.ForeignKey(Proveedor)
    anio = models.IntegerField(blank=True, null=True)
    mes = models.IntegerField(blank=True, null=True)
    nombre_prov = models.CharField(max_length=50, blank=True)
    tipo_conci = models.CharField(max_length=30, blank=True)
    f_recepcion = models.DateField(blank=True, null=True)
    e_recepcion = models.IntegerField(blank=True, null=True)
    class Meta:
        managed = False
        db_table = 'mpc_master'

我需要根据模型Master显示一个表,我需要显示提供者的名称而不是id_provider。

这是我的观点

def monitorViewV2(request):
    table = MonitorTable(Master.objects.all())
    RequestConfig(request).configure(table)
    return render(request,'monitorv2.html',{'table': table})

当我尝试在浏览器中看到模板时,显示下一个错误

  

ORA-00904:" MPC_MASTER"。" ID_PROVIDER_ID":无效标识符

我不知道错误是因为我在数据库中没有关系,或者我是否需要在视图中创建一个函数来显示名称而不是id_provider。 你能给我一些片段或链接,我可以采取一些想法来解决这个问题

提前致谢

1 个答案:

答案 0 :(得分:1)

Django需要有一个外键关系的整数DB列,它将保存相关对象的PK。在这种情况下,该列似乎是id_provider,因此您应在字段声明中指定该列。我还会使用不同的字段名称来避免混淆:

provider = models.ForeignKey(Proveedor, db_column='id_provider')

文档提供了更多背景信息: https://docs.djangoproject.com/en/1.7/ref/models/fields/#database-representation