Django 创建model的一些注意事项

时间:2024-10-26 17:37:02

自增主键字段

默认情况下,Django 会给每个模型添加下面这个字段:

id = models.AutoField(primary_key=True)

这是一个自增主键字段。

如果你想指定一个自定义主键字段,只要在某个字段上指定primary_key=True 即可。如果 Django 看到你显式地设置了 Field.primary_key,就不会自动添加 id 列。

每个模型只能有一个字段指定primary_key=True(无论是显式声明还是自动添加)。

字段的自述名

ForeignKeyManyToManyField 和 OneToOneField 之外,每个字段类型都接受一个可选的位置参数 —— 字段的自述名。

如果没有给定自述名,Django 将根据字段的属性名称自动创建自述名 —— 将属性名称的下划线替换成空格。

在这个例子中,自述名是 "person's first name":

first_name = models.CharField("person's first name", max_length=30)

在这个例子中,自述名是  "first name"

first_name = models.CharField(max_length=30)


##########

first_name = models.CharField("person's first name", max_length=30)   -->第一个参数可创建字段的自述名

first_name = models.CharField(max_length=30)               -->若没有创建字段的自述名, Django 将根据字段的属性名称自动创建自述名—— 将属性名称的下划线替换成空格。

first_name 是字段的属性名。

##########

下面是几个特例,特例的原因是在于这些字段的第一参数是模型,而不是参数,需要使用verbose_name关键字参数来指定自述名。

ForeignKeyManyToManyField 和 OneToOneField 都要求第一个参数是一个模型类,所以要使用verbose_name 关键字参数才能指定自述名:

poll = models.ForeignKey(Poll, verbose_name="the related poll")
sites = models.ManyToManyField(Site, verbose_name="list of sites")
place = models.OneToOneField(Place, verbose_name="related place")

习惯上,verbose_name 的首字母不用大写。Django 在必要的时候会自动大写首字母。