模型层表操作之Fields字段

模型层表操作之Fields字段

一、字段名命名限制

Fields字段被指定为模型类的类属性,是模型最重要的部分,也是模型唯一必须要有的部分,是用来定义数据库字段的。

Django 对字段的命名设置了一些限制:

1、注意字段名不要选择与模型API冲突的名字,如clean、save或delete等

2、字段名不能是Python保留字,因为这将导致Python语法错误。例如:

class Example(models.Model):
    pass = models.IntegerField() # 'pass'是保留字 

3、由于Django 查询语法的工作方式,所以字段名称中连续的下划线不能超过两个。 例如:

class Example(models.Model):
    foo__bar = models.IntegerField() # 错误,因字段'foo__bar'带有两个下划线

4、出于类似的原因,字段名不能以下划线结尾。

上述只是针对模型字段的限制,并不是针对数据库列的限制,我们的模型字段名与数据库列名并不是匹配的,可以用db_column字段指定数据库名

class Example(models.Model):
    # 数据库中字段名改为aaa__aaa,但查询时仍用aaa
    aaa=models.CharField(max_length=10,db_column='aaa__aaa')  
    bbb=models.CharField(max_length=10,db_column='bbb_')

5、SQL 的保留字例如select、where 和join,可以用作模型的字段名,因为Django 会对底层的SQL 查询语句中的数据库表名和列名进行转义。 它根据你的数据库引擎使用不同的引用语法。即使可以,当我们还是不推荐应用保留字。

二、字段类型

字段类型:

#1、AutoField
int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。

#2、IntegerField
一个整数类型,范围在 -2147483648 to 2147483647。

#3、CharField
字符类型,必须提供max_length参数, max_length表示字符长度。

#4、DateField
日期字段,日期格式  YYYY-MM-DD,相当于Python中的datetime.date()实例。

#5、DateTimeField
日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例

示例

from django.db import models

class Musician(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    instrument = models.CharField(max_length=100)

class Album(models.Model):
    artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    release_date = models.DateField()
    num_stars = models.IntegerField()

• 更多详见:

附录1:常用字段和非常用字段合集

• django提供了几十个内置的字段类型,详见
https://docs.djangoproject.com/en/3.0/ref/models/fields/#model-field-types

• 如果django的内置类型无法满足需求,也可以自定义
https://docs.djangoproject.com/en/3.0/howto/custom-model-fields/

三、字段选项/参数

每个字段都有一组特定于该字段的参数。例如字段CharField(及其子类)必须定义一个max_length参数,该参数指定用于存储数据的VARCHAR数据库字段的大小,这部分参数参考官网或提示指定即可。

我们主要讨论一下可用于所有字段类型的公共参数,当然,所有的都是可选的

1、null:
如果为True,Django将在数据库中将空值存储为NULL。默认值为False。

2、blank:
如果为True,则该字段允许为空。默认值为False。

注意,这与null不同。null纯粹与数据库相关,而blank则与验证相关。如果字段的blank=True,则表单验证将允许输入空值。如果字段为空=假,则该字段是必需的。

3、unique:

如果为True,该字段必须是唯一的

4、db_index

如果db_index=True 则代表着为此字段设置索引。

5、db_column

指定数据对应的字段名
name = models.CharField(max_length=64, db_column=’book_name’)

默认字段名为name,指定db_column后,数据库表字段名为book_name

6、choices

用于指定一个二元组,如果给定了此选项,则admin界面默认表单小部件将是一个选择框,而不是标准文本字段,并且将选择限制为给定的选项,如下

from django.db import models

class Person(models.Model):
    # 每个元组的第二个元素用来在amdin管理界面显示,而第一个元素才是被存入数据库中的值
    SHIRT_SIZES = (
        ('S', 'Small'),
        ('M', 'Medium'),
        ('L', 'Large'),
    )
    name = models.CharField(max_length=60)
    shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)

>>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
'L'
>>> p.get_shirt_size_display() # 可以使用get_FOO_display()方法访问具有选项的字段的显示值
'Large'

7、default
字段的默认值。这可以是值或可调用对象。如果可调用,则每次创建新对象时都将调用它。

111

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇

You cannot copy content of this page