我建立了一个名为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
Run Code Online (Sandbox Code Playgroud)
在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 | |
Run Code Online (Sandbox Code Playgroud)
此时,我想知道为什么字段名称是'writer_id'.
我认为字段名称必须是'writer_sid'或'writer'.
我该如何解决?
默认情况下,Django通过附加_id到您在模型中定义的字段名称来填充列的名称.您必须使用db_columnproperty 显式指定列的名称 ,如下所示:
writer = models.ForeignKey(Bbs_User, db_column='writer_sid')
Run Code Online (Sandbox Code Playgroud)
框架会自动以这种方式命名外键,但您可以db_column在声明字段时使用参数更改列的名称:
myKey = models.ForeignKey('MyRelatedModel', db_column='my_column_name')
Run Code Online (Sandbox Code Playgroud)
更新:我应该提到自动命名在进行查询时有一些优点:如果你调用myBbsInstance.writer.id你会得到一个你需要解析的 RelatedManager 实例,点击数据库,只获取 id,而调用myBbsInstance.writer_id只返回插入到列,没有数据库命中。它非常好记。
| 归档时间: |
|
| 查看次数: |
9075 次 |
| 最近记录: |