2014-09-04 74 views
0

我正在开发一个django应用程序,我使用的是旧数据库。此数据库在任何表中都没有主键或约束。这是我的两个型号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' 

我需要显示基于模型主表的,我需要显示的供应商,而不是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”:无效标识符

我不知道该错误是因为我没有数据库中的关系,或者如果我需要在视图中创建一个函数来显示名称而不是t他id_provider。 能给我一些片断或链接,我可以把一些想法来解决这个问题提前

感谢

+0

是'id_provider'上'mpc_master'表中的实际列名? – 2014-09-04 20:53:54

+0

是的,我使用Python manage.py inspectdb> models.py – Joseleg 2014-09-04 21:32:21

+0

并将'Integer'列转换为'ForeignKey'? – 2014-09-04 21:36:21

回答

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

+0

谢谢Peter,它的工作很棒 – Joseleg 2014-09-05 16:23:50