python - 如何更改 Django 中外键的 db_column 名称?
问题描述
如何在 Django 中更改外键的 db_column?
class A(models.Model):
it_id = models.CharField('IT ID', max_length=10)
class B(models.Model):
it_id = models.ForeignKey('A', related_name='item', on_delete=models.PROTECT, db_column='it_id')
当我调用对象时,
>>> B.objects.all().values()
<QuerySet [{'it_id_id'}:'xxx']>
它是'it_id_id'....
如何从“it_id_id”更改“it_id”?
解决方案
这与数据库列的名称无关,而是与Django字段的名称有关。Django 会自动…_id
为 s 添加一个后缀ForeignKey
,然后存储被引用对象的主键。因此, aForeignKey
的名称以 a 结尾是没有意义的…_id
。有关详细信息,请参阅_id
后缀 antipattern。
因此,您可以将模型更改为:
class B(models.Model):
it = models.ForeignKey(
'A',
related_name='item',
on_delete=models.PROTECT
)
如果您不想这样做,您可以it_id
通过别名获取 的值:
from django.db.models import F
B.objects.values(it_id=F('it_id_id'))