繁体   English   中英

如何在Django中提供外键名称

[英]How to give foreign key name in django

我建立了一个名为bbs的模型,该模型引用了User表。

class Bbs_User(models.Model):
    sid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=45)
    #...

class Bbs(models.Model):
    sid = models.AutoField(primary_key=True)
    writer  = models.ForeignKey(Bbs_User)
    title = models.CharField(max_length=80)
    content = models.TextField()

    class Meta:
        db_table = 'Bbs'

    def __str__(self)
        return self.title

在mysql客户端中,我查看了Bbs表的布局。

mysql> desc Bbs
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+ 
| sid         | int(11)      | NO   | PRI | NULL    | auto_increment |
| writer_id   | int(11)      | NO   | MUL | NULL    |                |

此时,我想知道为什么字段名称是'writer_id'。
我认为字段名称必须为“ writer_sid”或“ writer”。

我该如何解决?

默认情况下,Django通过在您在模型中定义的字段名称后附加_id来填充列的名称。 您必须使用db_column属性显式指定列的名称,如下所示:

writer = models.ForeignKey(Bbs_User, db_column='writer_sid')

框架通过这种方式自动为外键命名,但是在声明字段时,可以使用db_column参数更改列的名称:

myKey = models.ForeignKey('MyRelatedModel', db_column='my_column_name')

更新:我应该提一下,自动命名在查询时有一些优势:如果调用myBbsInstance.writer.id您将得到一个需要解析的RelatedManager实例,在调用myBbsInstance.writer.id ,将其击中数据库即可获取ID myBbsInstance.writer_id仅返回插入列中的数字,而没有数据库命中。 这很容易记。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM