Python Django中的非主外键

Python Django中的非主外键,python,mysql,django,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模型表A与B在A.name=B.name上有一对多关系?常规的ForeignKey关系要求B使用A.id而不是

我想从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模型表
A
B
A.name=B.name
上有一对多关系?常规的
ForeignKey
关系要求
B
使用
A.id
而不是
name
,但我不能修改现有遗留数据库的结构。

使用和选项

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

>>> b = B.objects.get(id=1)
>>> b.name_id # the value stored in the 'name' database column
>>> b.name # the related 'A' instance

Django的models.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")
“to_字段”实际上是外部模型中字段的名称


“db_列”是本地模型中要重命名foreignkey的字段的名称

这应该是可接受的答案。该示例是通用的,避免了与原始问题字段名称的混淆。如果该字段已被称为
区块链
,为什么您需要
db_column=“blockchain”
Wallet
中的字段
blockchain
,否则根据标准Django命名,该字段将被称为区块链id。
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")