我建立了一个名为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'。
我该如何解决?
答案 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
只返回列中插入的数字,而不是数据库命中。它非常助记。