Django中的非主要外键

时间:2015-07-14 16:31:43

标签: python mysql django

我有两个来自遗留数据库的表,我想从Django站点访问。它们看起来像这样:

Table A
id (int, primary key)
name (string, unique)
...

Table B
id (int, primary key)
name
record_date
(name, record_date are unique together)
...

如何告诉我的Django模型表AB上的A.name=B.name有一对多的关系?常规ForeignKey关系需要B使用A.id而不是name,但我无法修改现有旧数据库的结构。

2 个答案:

答案 0 :(得分:24)

使用to_fielddb_column选项。

try{

                Properties props=new Properties();
                props.put("user", username);
                props.put("password", password);
                props.put("maxIdle", maxidle);
                props.put("maxActive", maxactive);
                props.put("initialSize", initialsize);

                Class.forName(driver);
                DriverManager.getDriver(url);
                simplecon = DriverManager.getConnection(url,props);  //DriverManager.getConnection(url,username,password);
                System.out.println("\n Simple JDBC simplecon ::"+simplecon);
                System.out.println("\n\n<<<<<<< --- Connected to oracle DB By  Simple JDBC Connection ------ >>>>>>\n\n"); 
              }catch(Exception e1){
                  System.out.println("\n <<<<<<<<<<<< Inside  Simple JDBC Connection Exception Block >>>>>>>>>>>>>>> ::");
                  e1.printStackTrace(); 
               }

创建外键后,您可以按如下方式访问值和相关实例:

class B(models.Model):
    name = models.ForeignKey(A, to_field="name", db_column="name")

答案 1 :(得分:1)

Django的模型.ForeignKey文档不是很清楚。如果您在数据库中反映了两个模型:

class Blockchain(models.Model):
    symbol = models.CharField(max_length=50, primary_key=True, unique=True)

class Wallet(models.Model):
    index = models.AutoField(primary_key=True)
    wallet = models.CharField(max_length=100, null=True)
    blockchain = models.ForeignKey(Blockchain, to_field="symbol", db_column="blockchain")

&#34; to_field&#34;实际上是ForeignKey模型的关键。

&#34; db_column&#34;是要在本地模型中重命名外键的字段的名称