Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql django使用两个唯一的外键连接_Mysql_Sql_Django_Join - Fatal编程技术网

Mysql django使用两个唯一的外键连接

Mysql django使用两个唯一的外键连接,mysql,sql,django,join,Mysql,Sql,Django,Join,我受够了。我有两张桌子: TABLE1 (CODE,SUBCODE,DESCR,FIELD4,FIELD5,...) TABLE2 (ID1,ID2,CODE,SUBCODE,FIELD5,FIELD6,...) 模型是这样的: class Table1(models.Model): code = models.IntegerField(primary_key=True, db_column='CODE') # Field name made lowercase. sub

我受够了。我有两张桌子:

TABLE1 (CODE,SUBCODE,DESCR,FIELD4,FIELD5,...)

TABLE2 (ID1,ID2,CODE,SUBCODE,FIELD5,FIELD6,...)
模型是这样的:

class Table1(models.Model):

    code = models.IntegerField(primary_key=True, db_column='CODE') # Field name made lowercase.

    subcode = models.IntegerField(primary_key=True, db_column='SUBCODE') # Field name made lowercase.

    description = models.CharField(db_column='DESCR', max_length=30) # Field name made lowercase.

    field4 = models.CharField(db_column='FIELD4', max_length=8) # Field name made lowercase.

    field5 = models.CharField(db_column='FIELD5', max_length=30) # Field name made lowercase.

    (...)

class Meta:

    managed = False

    db_table = 'TABLE1'

    unique_together = (("code", "subcode"),)


class Table2(models.Model):

    id1 = models.IntegerField(primary_key=True, db_column='ID1') # Field name made lowercase.

    id2 = models.IntegerField(primary_key=True, db_column='ID2') # Field name made lowercase.

    code = models.IntegerField(db_column='CODE') # Field name made lowercase.<br/><br/>
    subcode = models.IntegerField(db_column='SUBCODE') # Field name made lowercase.

    field5 = models.CharField(db_column='FIELD5', max_length=32) # Field name made lowercase.

    field6 = models.FloatField(db_column='FIELD6') # Field name made lowercase.

    code_fk = models.ForeignKey(Table1, db_column='CODE', to_field='code',       related_name='code_fk')

    subcode_fk = models.ForeignKey(Table1, db_column='SUBCODE', to_field='subcode', related_name='subcode_fk')

class Meta:

    managed = False

    db_table = 'TABLE2'

    unique_together = (("id1", "id2"),)
Table2.objects.all()
有一种方法可以在模板中为返回的每一行显示字段代码、子代码和从另一个表中获取的相关描述

我想做一个简单的

SELECT B.CODE, B.SUBCODE, A.DESCR
FROM TABLE1 A JOIN TABLE2 B
ON A.CODE = B.CODE AND A.SUBCODE = B.SUBCODE
我必须如何修改我的模型才能做到这一点

Django。。。这意味着模型上只有一个字段应标记为
primary\u key=True

如果您不能将db模式调整为Django,那么这会出现问题(我猜这可能是您的情况,因为您有
managed=False

您可以尝试使用如下模块:


(我没有亲自尝试过)

我想也有类似的问题。看看……谢谢!我看到了,但在这种情况下,每个外键指向不同的表。我的问题是,两个外键一起标识另一个表中的一条记录。如果我尝试访问其中一个,我会返回多个对象,这是正确的,但是我如何将它们一起使用以使连接工作?但是如果两个外键都指向另一个表中的单个条目。你为什么用两个外键。。?为什么不使用一个外键呢?因为那个表有两个主键,代码和子代码,这两个主键都是唯一的。有没有一种方法可以在模型中只使用一个外键来表示这一点?我无法更改数据库..谢谢!这正是我要找的!唯一的问题是我使用的是django 1.6.2,该模块似乎与1.4兼容。我怎样才能降级我正在使用的django版本?@MisterFrank您只需
pip卸载django
,然后
pip安装django==1.4
…您想使用它,这样您就可以只对一个项目执行此操作而不影响其他项目。我在使用.raw()时找到了另一个有效的替代方法@MisterFrank,尽管您失去了使用普通queryset方法的能力,但您对该模型的所有查询都需要是原始的