如何在django中给出外键名称

时间:2015-09-17 06:23:16

标签: python 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'。

我该如何解决?

2 个答案:

答案 0 :(得分:7)

默认情况下,Django通过将writer = models.ForeignKey(Bbs_User, db_column='writer_sid') 附加到您在模型中定义的字段名称来填充列的名称。您必须使用db_column属性明确指定列的名称,如下所示:

{{1}}

答案 1 :(得分:4)

外键由框架自动命名,但您可以在声明字段时使用db_column参数更改列的名称:

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

更新:我应该提一下,自动命名在进行查询时有一些优势:如果你调用myBbsInstance.writer.id,你会得到一个你需要解决的RelatedManager实例,点击数据库,只是获取id,同时调用myBbsInstance.writer_id只返回列中插入的数字,而不是数据库命中。它非常助记。