我是Django框架的新手,对模型有点困惑。
当一个"班级"在model.py中,我可以理解为" table"在数据库?例如,在下面的代码中,"测试","联系"和"标记"是Django使用的数据库中的所有表吗?
from django.db import models
class Test(models.Model):
name = models.CharField(max_length=20)
class Contact(models.Model):
name = models.CharField(max_length=200)
age = models.IntegerField(default=0)
email = models.EmailField()
def __unicode__(self):
return self.name
class Tag(models.Model):
contact = models.ForeignKey(Contact)
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
在班级Tag
中,它正在使用models.ForeignKey(Contact)
,根据我的理解,应该在表的一个特定列上建立外键,但为什么ForeignKey
建立在直接表,即表Contact
?
非常感谢任何指导。
答案 0 :(得分:2)
只有在models.Model
类延伸时,您才能将您的类理解为数据库中的表。
这变成了一个表格:
class Order(models.Model):
pass
这不会成为模特:
class SomeHelper():
....
对于ForeignKey,它将自动绑定到其他模型的主键。您可以通过在该ForeignKey中设置to_field
来更改它,但默认值为pk
:
models.ForeignKey(Bar, to_field='non-pk-field')
答案 1 :(得分:1)
外键正在建立具有主键的列。
只有一个主键位于表格中,所以在django中你只需要提供表名。它将自动与具有主键的列建立。
如果您未在列中提及任何主键,则django模型将自动添加一个id
列,该列将具有每个条目的唯一非空整数值。
如果要明确地将外键提供给特定列,可以这样做:
models.ForeignKey(TableName, db_column='Column_name')