django--模型字段引用
如果内置字段不起作用,您可以尝试使用django-localflavor(文档),其中包含对特定国家和文化有用的各种代码片段。
此外,您可以轻松编写自己的自定义模型字段。
注意
从技术上讲,这些模型是定义的django.db.models.fields
,但为方便起见,它们被导入django.db.models
; 标准惯例是使用和引用字段 。from django.db import models
models.<Foo>Field
字段选项¶
以下参数可用于所有字段类型。所有都是可选的。
null
¶
Field.
null
¶
如果True
,Django将NULL
在数据库中存储空值。默认是False
。
避免null
在基于字符串的字段上使用,例如 CharField
和TextField
。如果基于字符串的字段具有 null=True
,则表示它具有“无数据”的两个可能值:NULL
和空字符串。在大多数情况下,为“无数据”提供两个可能的值是多余的; Django约定是使用空字符串,而不是 NULL
。一个例外是当a 和CharField
both都设置了。在这种情况下,需要在使用空值保存多个对象时避免唯一约束违规。unique=True
blank=True
null=True
对于基于字符串和非基于字符串的字段,您还需要设置blank=True
是否允许在表单中允许空值,因为该 null
参数仅影响数据库存储(请参阅参考资料blank
)。
注意
使用Oracle数据库后端时,NULL
无论此属性如何,都将存储该值以表示空字符串。
blank
¶
Field.
blank
¶
如果True
,该字段允许为空。默认是False
。
请注意,这与...不同null
。null
纯粹与数据库相关,而blank
与验证相关。如果字段有blank=True
,则表单验证将允许输入空值。如果字段有blank=False
,则需要该字段。
choices
¶
Field.
choices
¶
由两个项目(例如)的可迭代组成 的序列,用作该字段的选项。如果给出了选择,则通过模型验证强制执行,默认表单小部件将是具有这些选项而不是标准文本字段的选择框。[(A, B), (A, B) ...]
每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是人类可读的名称。例如:
YEAR_IN_SCHOOL_CHOICES = [
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
]
通常,最好在模型类中定义选项,并为每个值定义适当命名的常量:
from django.db import models class Student(models.Model):
FRESHMAN = 'FR'
SOPHOMORE = 'SO'
JUNIOR = 'JR'
SENIOR = 'SR'
YEAR_IN_SCHOOL_CHOICES = [
(FRESHMAN, 'Freshman'),
(SOPHOMORE, 'Sophomore'),
(JUNIOR, 'Junior'),
(SENIOR, 'Senior'),
]
year_in_school = models.CharField(
max_length=2,
choices=YEAR_IN_SCHOOL_CHOICES,
default=FRESHMAN,
) def is_upperclass(self):
return self.year_in_school in (self.JUNIOR, self.SENIOR)
虽然您可以在模型类之外定义选择列表然后引用它,但是为模型类中的每个选项定义选项和名称会将所有信息保存到使用它的类中,并使选择易于引用(例如,Student.SOPHOMORE
将在Student
模型已导入的任何地方工作)。
您还可以将可用选项收集到可用于组织目的的命名组中:
MEDIA_CHOICES = [
('Audio', (
('vinyl', 'Vinyl'),
('cd', 'CD'),
)
),
('Video', (
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
)
),
('unknown', 'Unknown'),
]
每个元组中的第一个元素是要应用于组的名称。第二个元素是一个可迭代的2元组,每个2元组包含一个值和一个人类可读的选项名称。分组选项可以与单个列表中的未分组选项组合(例如本示例中的 未知选项)。
对于已choices
设置的每个模型字段,Django将添加一个方法来检索字段当前值的可读名称。请参阅 get_FOO_display()
数据库API文档。
请注意,选择可以是任何序列对象 - 不一定是列表或元组。这使您可以动态构造选择。但是,如果你发现自己choices
变得动态,你可能最好使用一个合适的数据库表ForeignKey
。choices
用于静态数据,如果有的话,变化不大。
注意
每次choices
更改顺序时都会创建一个新的迁移。
除非blank=False
在字段上设置, 否则将使用选择框呈现default
包含的标签"---------"
。要覆盖此行为,请将一个元组添加到choices
包含None
; 例如。或者,您可以使用空字符串而不是有意义的字符串- 例如a 。(None, 'Your String ForDisplay')
None
CharField
db_column
¶
Field.
db_column
¶
用于此字段的数据库列的名称。如果没有给出,Django将使用该字段的名称。
如果您的数据库列名是SQL保留字,或者包含Python变量名中不允许的字符 - 特别是连字符 - 那就没问题。Django在幕后引用了列名和表名。
db_tablespace
¶
Field.
db_tablespace
¶
如果此字段已编制索引,则用于此字段索引的数据库表空间的名称。默认值为项目的 DEFAULT_INDEX_TABLESPACE
设置(如果已设置)或db_tablespace
模型的设置(如果有)。如果后端不支持索引的表空间,则忽略此选项。
default
¶
Field.
default
¶
字段的默认值。这可以是值或可调用对象。如果可调用,则每次创建新对象时都会调用它。
默认不能是可变对象(模型实例,list
,set
等),作为该对象的相同实例的引用将被用作在所有新的模型实例的默认值。而是将所需的默认值包装在可调用的中。例如,如果要指定一个默认dict
的 JSONField
,使用函数:
def contact_default():
return {"email": "to1@example.com"} contact_info = JSONField("ContactInfo", default=contact_default)
lambda
s不能用于字段选项,default
因为它们无法通过迁移进行序列化。请参阅其他警告的文档。
对于ForeignKey
那些映射到模型实例的字段,默认值应该是它们引用的字段的值(pk
除非 to_field
已设置)而不是模型实例。
创建新模型实例时,将使用默认值,并且不为该字段提供值。当字段是主键时,默认值也会在字段设置为时使用None
。
error_messages
¶
Field.
error_messages
¶
该error_messages
参数允许您覆盖该字段将引发的默认消息。传入一个字典,其中的键与您要覆盖的错误消息相匹配。
错误消息键包括null
,blank
,invalid
,invalid_choice
, unique
,和unique_for_date
。在下面的“ 字段类型”部分中为每个字段指定了其他错误消息密钥。
这些错误消息通常不会传播到表单。请参阅 有关模型的error_messages的注意事项。
help_text
¶
Field.
help_text
¶
使用表单小部件显示的额外“帮助”文本。即使您的字段未在表单上使用,它也对文档很有用。
请注意,此值不会在自动生成的表单中进行HTML转义。help_text
如果您愿意,这可以让您包含HTML 。例如:
help_text="Please use the following format: <em>YYYY-MM-DD</em>."
或者,您可以使用纯文本并 django.utils.html.escape()
转义任何HTML特殊字符。确保您转义可能来自不受信任的用户的任何帮助文本,以避免跨站点脚本攻击。
primary_key
¶
Field.
primary_key
¶
如果True
,此字段是模型的主键。
如果没有primary_key=True
为模型中的任何字段指定,Django将自动添加一个AutoField
来保存主键,因此primary_key=True
除非要覆盖默认的主键行为,否则不需要设置任何字段。有关更多信息,请参阅 自动主键字段。
primary_key=True
暗示null=False
和 unique=True
。对象上只允许一个主键。
主键字段是只读的。如果更改现有对象上的主键值,然后保存它,则将创建一个与旧对象并排的新对象。
unique
¶
Field.
unique
¶
如果True
,该字段在整个表格中必须是唯一的。
这在数据库级别和模型验证中强制执行。如果您尝试在unique
字段中保存具有重复值的模型,django.db.IntegrityError
则将通过模型的save()
方法引发 a 。
此选项适用于除ManyToManyField
和 之外的所有字段类型OneToOneField
。
请注意,当unique
是True
,你并不需要指定 db_index
,因为unique
意味着索引的创建。
unique_for_date
¶
Field.
unique_for_date
¶
将其设置为a的名称DateField
或DateTimeField
要求此字段对于日期字段的值是唯一的。
举例来说,如果你有一个字段title
有 unique_for_date="pub_date"
,那么Django的不允许的两个记录具有相同的入口title
和pub_date
。
请注意,如果将其设置为指向a DateTimeField
,则仅考虑该字段的日期部分。此外,当USE_TZ
是 True
时,支票将在执行当前时区的对象被保存的时间。
这Model.validate_unique()
在模型验证期间强制执行,但在数据库级别不强制执行。如果任何unique_for_date
约束涉及不属于a ModelForm
的字段(例如,如果其中一个字段列在exclude
或具有 editable=False
),Model.validate_unique()
则将跳过该特定约束的验证。
字段类型¶
AutoField
¶
一IntegerField
,根据可用ID自动递增。您通常不需要直接使用它; 如果您没有另外指定,主键字段将自动添加到您的模型中。请参阅自动主键字段。
BigIntegerField
¶
一个64位整数,很像一个IntegerField
不同之处在于它是保证从适合数字-9223372036854775808
到 9223372036854775807
。此字段的默认表单窗口小部件是a TextInput
。
BinaryField
¶
用于存储原始二进制数据的字段。它可以分配bytes
, bytearray
或memoryview
。
默认情况下,BinaryField
设置editable
为False
,在这种情况下,它不能包含在a中ModelForm
。
较旧的版本不允许设置editable
为True
。
BinaryField
有一个额外的可选参数:
BinaryField.
max_length
¶-
字段的最大长度(以字符为单位)。在Django的验证中强制使用最大长度
MaxLengthValidator
。
滥用 BinaryField
虽然您可能会考虑将文件存储在数据库中,但请考虑在99%的情况下这是不好的设计。此字段是不是适当的替代静态文件处理。
BooleanField
¶
真/假字段。
此字段的默认表单窗口小部件是CheckboxInput
,或者NullBooleanSelect
是null=True
。
默认值BooleanField
是None
当Field.default
没有定义。
在旧版本中,此字段不允许null=True
,因此您必须使用NullBooleanField
。现在不鼓励使用后者,因为它可能会在未来版本的Django中被弃用。
CharField
¶
字符串字段,用于小到大的字符串。
对于大量文本,请使用TextField
。
此字段的默认表单窗口小部件是a TextInput
。
CharField
有一个额外的必要参数:
CharField.
max_length
¶-
字段的最大长度(以字符为单位)。max_length在数据库级别和Django的验证中强制执行
MaxLengthValidator
。
注意
如果您正在编写一个必须可移植到多个数据库后端的应用程序,您应该知道max_length
某些后端存在限制 。有关详细信息,请参阅数据库后端说明。
DateField
¶
日期,由Python datetime.date
实例表示。有一些额外的可选参数:
DateField.
auto_now
¶-
每次保存对象时自动将字段设置为现在。对“最后修改”的时间戳有用。请注意,始终 使用当前日期; 它不仅仅是您可以覆盖的默认值。
该字段仅在呼叫时自动更新
Model.save()
。在以其他方式更新其他字段时,不会更新该字段,例如QuerySet.update()
,尽管您可以在更新中为该字段指定自定义值。
DateField.
auto_now_add
¶-
首次创建对象时自动将字段设置为现在。用于创建时间戳。请注意,始终使用当前日期; 它不仅仅是您可以覆盖的默认值。因此,即使您在创建对象时为此字段设置了值,也会将其忽略。如果您希望能够修改此字段,请设置以下内容而不是
auto_now_add=True
:- 适用于
DateField
:default=date.today
- 来自datetime.date.today()
- 适用于
DateTimeField
:default=timezone.now
- 来自django.utils.timezone.now()
- 适用于
此字段的默认表单窗口小部件是a TextInput
。管理员添加了一个JavaScript日历,以及“今天”的快捷方式。包含其他invalid_date
错误消息密钥。
选项auto_now_add
,auto_now
和default
互相排斥。这些选项的任何组合都将导致错误。
注意
当前实现,设置auto_now
或auto_now_add
以 True
会导致该领域拥有editable=False
和blank=True
设置。
注意
在auto_now
和auto_now_add
选项将始终使用的日期默认时区在创建或更新的时刻。如果您需要不同的东西,您可能需要考虑简单地使用您自己的可调用默认值或覆盖save()
而不是使用auto_now
或auto_now_add
; 或者使用a DateTimeField
而不是a 来DateField
决定如何在显示时处理从datetime到date的转换。
DateTimeField
¶
日期和时间,由Python datetime.datetime
实例表示。采取相同的额外参数DateField
。
此字段的默认表单窗口小部件是单个 TextInput
。管理员使用两个单独的 TextInput
小部件和JavaScript快捷方式。
DecimalField
¶
一个固定精度的十进制数,由Python Decimal
实例表示。它使用验证输入 DecimalValidator
。
有两个必需的参数:
DecimalField.
max_digits
¶-
数字中允许的最大位数。请注意,此数字必须大于或等于
decimal_places
。
DecimalField.
decimal_places
¶-
与数字一起存储的小数位数。
例如,要存储999
分辨率为2位小数的数字,您可以使用:
models.DecimalField(..., max_digits=5, decimal_places=2)
并存储大约10亿的数字,分辨率为10位小数:
models.DecimalField(..., max_digits=19, decimal_places=10)
此字段的默认表单控件是NumberInput
当localize
为False
或 TextInput
以其他方式。
注意
有关FloatField
和DecimalField
类之间差异的更多信息 ,请参阅FloatField与DecimalField。
DurationField
¶
用于存储时间段的字段 - 用Python建模 timedelta
。在PostgreSQL上使用时,使用interval
的数据类型是Oracle,数据类型是。否则使用一微秒。INTERVAL DAY(9) TO SECOND(6)
bigint
注意
算术DurationField
在大多数情况下都适用。但是在除PostgreSQL之外的所有数据库上,将a的值DurationField
与算术DateTimeField
实例进行比较将无法按预期工作。
EmailField
¶
一CharField
,检查该值是使用一个有效的电子邮件地址 EmailValidator
。
FileField
¶
文件上传字段。
注意
该primary_key
参数不受支持,如果使用则会引发错误。
有两个可选参数:
FileField.
upload_to
¶-
此属性提供了设置上载目录和文件名的方法,可以通过两种方式进行设置。在这两种情况下,该值都将传递给该
Storage.save()
方法。如果指定字符串值,则可能包含
strftime()
格式,该格式将替换为文件上载的日期/时间(以便上载的文件不会填满给定目录)。例如:class MyModel(models.Model):
# file will be uploaded to MEDIA_ROOT/uploads
upload = models.FileField(upload_to='uploads/')
# or...
# file will be saved to MEDIA_ROOT/uploads/2015/01/30
upload = models.FileField(upload_to='uploads/%Y/%m/%d/')如果使用默认值
FileSystemStorage
,则字符串值将附加到MEDIA_ROOT
路径中,以在本地文件系统上形成将存储上载文件的位置。如果您使用的是其他存储,请检查该存储的文档以了解其处理方式upload_to
。upload_to
也可以是可调用的,例如函数。这将被调用以获取上载路径,包括文件名。这个callable必须接受两个参数并返回一个Unix风格的路径(带有正斜杠)以传递给存储系统。这两个论点是:争论 描述 instance
FileField
定义模型的实例 。更具体地说,这是附加当前文件的特定实例。在大多数情况下,此对象尚未保存到数据库中,因此如果它使用默认值
AutoField
,则可能还没有其主键字段的值。filename
最初提供给文件的文件名。在确定最终目的地路径时可能会或可能不会考虑这一点。 例如:
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'user_{0}/{1}'.format(instance.user.id, filename) class MyModel(models.Model):
upload = models.FileField(upload_to=user_directory_path)
此字段的默认表单窗口小部件是a ClearableFileInput
。
在模型中使用a FileField
或ImageField
(见下文)需要几个步骤:
- 在您的设置文件中,您需要定义
MEDIA_ROOT
为您希望Django存储上载文件的目录的完整路径。(为了提高性能,这些文件不会存储在数据库中。)定义MEDIA_URL
为该目录的基本公共URL。确保Web服务器的用户帐户可以写入此目录。 - 将
FileField
或添加ImageField
到模型中,定义upload_to
用于指定MEDIA_ROOT
用于上载文件的子目录的选项 。 - 将存储在数据库中的所有内容都是文件的路径(相对于
MEDIA_ROOT
)。你很可能想要使用url
Django提供的便利属性。例如,如果ImageField
调用了mug_shot
您,则可以在模板中获取图像的绝对路径 。{{ object.mug_shot.url }}
例如,假设您MEDIA_ROOT
设置为'/home/media'
,并 upload_to
设置为'photos/%Y/%m/%d'
。所述'%Y/%m/%d'
的部分upload_to
被strftime()
格式化; '%Y'
是四位数的年份,'%m'
是两位数的月份,'%d'
是两位数的一天。如果您在2007年1月15日上传文件,它将保存在目录中/home/media/photos/2007/01/15
。
如果要检索上载文件的磁盘文件名或文件大小,可以分别使用name
和 size
属性; 有关可用属性和方法的更多信息,请参阅 File
类引用和管理文件 主题指南。
注意
该文件是作为将模型保存在数据库中的一部分保存的,因此在保存模型之前,不能依赖磁盘上使用的实际文件名。
可以使用该url
属性获取上载文件的相对URL 。在内部,它调用url()
底层Storage
类的方法。
请注意,无论何时处理上传的文件,都应密切关注上传文件的位置以及文件的类型,以避免安全漏洞。验证所有上传的文件,以确保文件符合您的认可。例如,如果您盲目地让某人将文件上传到Web服务器文档根目录中的目录而无需验证,那么有人可以上传CGI或PHP脚本并通过访问您站点上的URL来执行该脚本。不要允许。
另请注意,即使是上传的HTML文件,因为它可以由浏览器执行(虽然不是由服务器执行),但可能会产生相当于XSS或CSRF攻击的安全威胁。
FileField
实例在数据库中创建为varchar
默认最大长度为100个字符的列。与其他字段一样,您可以使用max_length
参数更改最大长度。
FileField
和FieldFile
¶
当您访问FileField
模型时,您将获得一个FieldFile
用于访问基础文件的代理实例。
FieldFile
镜像的API File
,有一个关键区别:由类包装的对象不一定是Python的内置文件对象的包装器。相反,它是Storage.open()
方法结果的包装器,可以是File
对象,也可以是自定义存储的File
API 实现。
除了从继承了API File
诸如 read()
和write()
,FieldFile
包括可用于与下面的文件交互的几种方法:
FieldFile.
name
¶
包括的根的相对路径的文件名 Storage
相关联的 FileField
。
FieldFile.
size
¶
基础Storage.size()
方法的结果。
FieldFile.
url
¶
一个只读属性,用于通过调用url()
基础Storage
类的方法 来访问文件的相对URL 。
打开或重新打开与指定的此实例关联的文件 mode
。与标准Python open()
方法不同,它不返回文件描述符。
由于底层文件在访问时会隐式打开,因此除了重置指向底层文件的指针或更改指针外,可能无需调用此方法mode
。
表现得像标准的Python file.close()
方法,并关闭与此实例关联的文件。
此方法获取文件名和文件内容,并将它们传递给该字段的存储类,然后将存储的文件与模型字段相关联。如果要手动将文件数据与FileField
模型上的实例关联 ,则该save()
方法用于保留该文件数据。
采用两个必需的参数:name
文件的名称,以及 content
包含文件内容的对象。可选save
参数控制是否在更改与此字段关联的文件后保存模型实例。默认为 True
。
请注意,content
参数应该是 django.core.files.File
Python的内置文件对象的实例。您可以File
从现有的Python文件对象构造一个如下:
from django.core.files import File
# Open an existing file using Python's built-in open()
f = open('/path/to/hello.world')
myfile = File(f)
或者您可以从Python字符串构造一个,如下所示:
from django.core.files.base import ContentFile
myfile = ContentFile("hello world")
有关更多信息,请参阅管理文件。
删除与此实例关联的文件,并清除该字段上的所有属性。注意:如果文件在delete()
调用时恰好打开,则此方法将关闭该文件 。
可选save
参数控制是否在删除与此字段关联的文件后保存模型实例。默认为 True
。
请注意,删除模型时,不会删除相关文件。如果您需要清理孤立的文件,您需要自己处理它(例如,使用可以手动运行或计划通过例如cron定期运行的自定义管理命令)。
FilePathField
¶
A CharField
的选择仅限于文件系统上某个目录中的文件名。有三个特殊参数,其中第一个是 必需的:
FilePathField.
path
¶-
需要。从中可以
FilePathField
选择的目录的绝对文件系统路径 。示例:"/home/images"
。
FilePathField.
match
¶-
可选的。作为字符串的正则表达式,
FilePathField
用于过滤文件名。请注意,正则表达式将应用于基本文件名,而不是完整路径。例如:"foo.*\.txt$"
,这将匹配一个名为foo23.txt
而不是bar.txt
或foo23.png
。
FilePathField.
allow_files
¶-
可选的。无论是
True
或False
。默认是True
。指定是否应包含指定位置的文件。无论是这个还是allow_folders
必须的True
。
FilePathField.
allow_folders
¶-
可选的。无论是
True
或False
。默认是False
。指定是否应包括指定位置的文件夹。无论是这个还是allow_files
必须的True
。
当然,这些参数可以一起使用。
一个潜在的问题是match
适用于基本文件名,而不是完整路径。所以,这个例子:
FilePathField(path="/home/images", match="foo.*", recursive=True)
...将匹配/home/images/foo.png
但不是/home/images/foo/bar.png
因为它match
适用于基本文件名(foo.png
和bar.png
)。
FilePathField
实例在数据库中创建为varchar
默认最大长度为100个字符的列。与其他字段一样,您可以使用max_length
参数更改最大长度。
FloatField
¶
由float
实例在Python中表示的浮点数。
此字段的默认表单控件是NumberInput
当localize
为False
或 TextInput
以其他方式。
FloatField
与 DecimalField
该FloatField
班有时夹杂了 DecimalField
阶级。虽然它们都代表实数,但它们以不同的方式表示这些数字。 内部FloatField
使用Python的float
类型,而DecimalField
使用Python的Decimal
类型。有关两者之间差异的信息,请参阅该decimal
模块的Python文档。
ImageField
¶
- class
ImageField
(upload_to = None,height_field = None,width_field = None,max_length = 100,**选项)[source]¶
从中继承所有属性和方法FileField
,但也验证上载的对象是有效图像。
除了可用于特殊属性FileField
,一个ImageField
也具有height
和width
属性。
为了便于查询这些属性,ImageField
有两个额外的可选参数:
ImageField.
height_field
¶-
每次保存模型实例时,将使用图像高度自动填充的模型字段的名称。
ImageField.
width_field
¶-
每次保存模型实例时,将使用图像宽度自动填充的模型字段的名称。
需要枕头库。
ImageField
实例在数据库中创建为varchar
默认最大长度为100个字符的列。与其他字段一样,您可以使用max_length
参数更改最大长度。
此字段的默认表单窗口小部件是a ClearableFileInput
。
IntegerField
¶
一个整数。从价值观-2147483648
到2147483647
在Django支持的所有数据库的安全。
它使用MinValueValidator
并 MaxValueValidator
根据默认数据库支持的值验证输入。
此字段的默认表单控件是NumberInput
当localize
为False
或 TextInput
以其他方式。
GenericIPAddressField
¶
IPv4或IPv6地址,采用字符串格式(例如192.0.2.30
或 2a02:42fe::4
)。此字段的默认表单窗口小部件是a TextInput
。
接下来是IPv6地址规范化 RFC 4291#section-2.2第 2.2节,包括使用该节第3段中建议的IPv4格式,如 ::ffff:192.0.2.0
。例如,2001:0::0:01
将被标准化为 2001::1
,并::ffff:0a0a:0a0a
到::ffff:10.10.10.10
。所有字符都转换为小写。
GenericIPAddressField.
protocol
¶-
限制指定协议的有效输入。可接受的值是
'both'
(默认),'IPv4'
或'IPv6'
。匹配不区分大小写。
GenericIPAddressField.
unpack_ipv4
¶-
解压缩IPv4映射地址,如
::ffff:192.0.2.1
。如果启用此选项,则该地址将被解压缩到192.0.2.1
。默认为禁用。只能在protocol
设置为时使用'both'
。
如果允许空值,则必须允许空值,因为空值存储为空。
NullBooleanField
¶
就像BooleanField
用null=True
。使用它代替此字段,因为它可能在Django的未来版本中被弃用。
PositiveIntegerField
¶
像一个IntegerField
,但必须是正面或零(0
)。从价值观0
到2147483647
在Django支持的所有数据库的安全。0
出于向后兼容性原因,接受该值。
PositiveSmallIntegerField
¶
像a PositiveIntegerField
,但只允许某个(依赖于数据库)点下的值。从价值观0
到32767
在Django支持的所有数据库的安全。
SlugField
¶
Slug是一个报纸术语。slu is是一种短标签,只包含字母,数字,下划线或连字符。它们通常用于URL。
与CharField类似,您可以指定max_length
(阅读有关数据库可移植性的说明以及max_length
该部分中的说明)。如果max_length
未指定,Django将使用默认长度50。
意味着设置Field.db_index
为True
。
基于某个其他值的值自动预填充SlugField通常很有用。您可以在管理员中自动执行此操作 prepopulated_fields
。
它用于validate_slug
或 validate_unicode_slug
用于验证。
SlugField.
allow_unicode
¶-
如果
True
,该字段除ASCII字母外还接受Unicode字母。默认为False
。
SmallIntegerField
¶
像一个IntegerField
,但只允许某个(数据库相关)点下的值。从价值观-32768
到32767
在Django支持的所有数据库的安全。
TextField
¶
一个大的文本字段。此字段的默认表单窗口小部件是a Textarea
。
如果指定max_length
属性,它将反映在Textarea
自动生成的表单字段的 窗口小部件中。但是,它不会在模型或数据库级别强制执行。使用一个 CharField
。
TimeField
¶
一个时间,由Python datetime.time
实例表示。接受相同的自动填充选项DateField
。
此字段的默认表单窗口小部件是a TextInput
。管理员添加了一些JavaScript快捷方式。
URLField
¶
A CharField
的URL,经过验证 URLValidator
。
此字段的默认表单窗口小部件是a TextInput
。
与所有CharField
子类一样,URLField
采用可选 max_length
参数。如果未指定 max_length
,则使用默认值200。
UUIDField
¶
用于存储通用唯一标识符的字段。使用Python的 UUID
类。在PostgreSQL上使用时,它以uuid
数据类型存储,否则存储在 char(32)
。
通用唯一标识符是AutoField
for的 一个很好的替代品primary_key
。数据库不会为您生成UUID,因此建议使用default
:
import uuid
from django.db import models class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
# other fields
请注意,可调用(省略括号)将传递给default
,而不是实例UUID
。
关系字段¶
Django还定义了一组表示关系的字段。
ForeignKey
¶
多对一的关系。需要两个位置参数:与模型相关的类和on_delete
选项。
要创建递归关系 - 与自身具有多对一关系的对象 - 使用。models.ForeignKey('self', on_delete=models.CASCADE)
如果需要在尚未定义的模型上创建关系,可以使用模型的名称,而不是模型对象本身:
from django.db import models class Car(models.Model):
manufacturer = models.ForeignKey(
'Manufacturer',
on_delete=models.CASCADE,
)
# ... class Manufacturer(models.Model):
# ...
pass
当模型作为具体模型被子类化并且与抽象模型无关时,解析这种在抽象模型上定义的关系app_label
:
from django.db import models class AbstractCar(models.Model):
manufacturer = models.ForeignKey('Manufacturer', on_delete=models.CASCADE) class Meta:
abstract = True
from django.db import models
from products.models import AbstractCar class Manufacturer(models.Model):
pass class Car(AbstractCar):
pass # Car.manufacturer will point to `production.Manufacturer` here.
要引用另一个应用程序中定义的模型,您可以使用完整的应用程序标签显式指定模型。例如,如果Manufacturer
上面的模型在另一个被调用的应用程序中定义,则production
需要使用:
class Car(models.Model):
manufacturer = models.ForeignKey(
'production.Manufacturer',
on_delete=models.CASCADE,
)
在解析两个应用程序之间的循环导入依赖关系时,这种称为惰性关系的引用可能很有用。
在数据库上自动创建数据库索引ForeignKey
。您可以通过设置db_index
为禁用此功能False
。如果要为一致性而不是连接创建外键,或者如果要创建替代索引(如部分或多列索引),则可能希望避免索引的开销。
数据库表示¶
在幕后,Django追加"_id"
字段名称来创建其数据库列名。在上面的示例中,Car
模型的数据库表将包含一manufacturer_id
列。(您可以通过指定显式更改此内容db_column
)但是,除非编写自定义SQL,否则您的代码永远不必处理数据库列名。您将始终处理模型对象的字段名称。
参数¶
ForeignKey
接受定义关系如何工作的细节的其他参数。
ForeignKey.
on_delete
¶-
当
ForeignKey
删除a引用的对象时,Django将模拟on_delete
参数指定的SQL约束的行为 。例如,如果您有一个可空的,ForeignKey
并且希望在删除引用的对象时将其设置为null:user = models.ForeignKey(
User,
models.SET_NULL,
blank=True,
null=True,
)on_delete
不会在数据库中创建SQL约束。稍后可以实现对数据库级级联选项的支持。
可能的值on_delete
可在以下位置找到 django.db.models
:
CASCADE
[来源]¶-
级联删除。Django模拟SQL约束ON DELETE CASCADE的行为,并删除包含ForeignKey的对象。
Model.delete()
不会在相关模型上调用,但 会为所有已删除的对象发送pre_delete
和post_delete
信号。
PROTECT
[来源]¶-
通过引发
ProtectedError
子类来 防止删除引用的对象django.db.IntegrityError
。
SET_NULL
[来源]¶-
设置
ForeignKey
null; 这是如果只可能null
是True
。
SET_DEFAULT
[来源]¶-
将
ForeignKey
其设置为默认值;ForeignKey
必须设置的默认值 。
SET
()[来源]¶-
设置
ForeignKey
传递给的值SET()
,或者传入 一个callable,调用它的结果。在大多数情况下,为了避免在导入models.py时执行查询,必须传递一个callable:from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import models def get_sentinel_user():
return get_user_model().objects.get_or_create(username='deleted')[0] class MyModel(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET(get_sentinel_user),
)
DO_NOTHING
[来源]¶-
不采取行动。如果数据库后端强制实施参照完整性,则
IntegrityError
除非您手动将SQL 约束添加到数据库字段,否则将导致这种情况。ON DELETE
ForeignKey.
limit_choices_to
¶-
当使用a
ModelForm
或admin 呈现此字段时,为此字段的可用选项设置限制(默认情况下,可以选择查询集中的所有对象)。可以使用字典,Q
对象或返回字典或Q
对象的可调用对象。例如:
staff_member = models.ForeignKey(
User,
on_delete=models.CASCADE,
limit_choices_to={'is_staff': True},
)导致
ModelForm
仅列出的相应字段Users
具有is_staff=True
。这在Django管理员中可能会有所帮助。可调用的表单可能很有用,例如,当与Python
datetime
模块一起使用时,可以按日期范围限制选择。例如:def limit_pub_date_choices():
return {'pub_date__lte': datetime.date.utcnow()} limit_choices_to = limit_pub_date_choices如果
limit_choices_to
是或返回,这是很有用复杂的查询,那么将只有当字段没有列在管理员可用的选项的效果 在 为模型。Qobject
raw_id_fields
ModelAdmin
注意
如果使用了callable
limit_choices_to
,则每次实例化新表单时都会调用它。也可以在验证模型时调用它,例如通过管理命令或管理员。admin构造查询集以多次在各种边缘情况下验证其表单输入,因此可能会多次调用您的可调用对象。
ForeignKey.
related_name
¶-
用于从相关对象返回到此关系的关系的名称。它也是
related_query_name
(用于目标模型的反向过滤器名称的名称)的默认值。有关完整说明和示例,请参阅相关对象文档。请注意,在抽象模型上定义关系时必须设置此值 ; 当你这样做时,可以使用 一些特殊的语法。如果你喜欢的Django不创建向后关系,设置
related_name
到'+'
或结束它'+'
。例如,这将确保User
模型与此模型不具有向后关系:user = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='+',
)
ForeignKey.
related_query_name
¶-
用于目标模型的反向过滤器名称的名称。它默认为值
related_name
或default_related_name
设置,否则默认为模型的名称:# Declare the ForeignKey with related_query_name
class Tag(models.Model):
article = models.ForeignKey(
Article,
on_delete=models.CASCADE,
related_name="tags",
related_query_name="tag",
)
name = models.CharField(max_length=255) # That's now the name of the reverse filter
Article.objects.filter(tag__name="important")喜欢
related_name
,related_query_name
通过一些特殊的语法支持app标签和类插值。
ForeignKey.
to_field
¶-
关系所涉及的相关对象上的字段。默认情况下,Django使用相关对象的主键。如果您引用其他字段,则该字段必须具有
unique=True
。
ForeignKey.
db_constraint
¶-
控制是否应在数据库中为此外键创建约束。默认是
True
,这几乎可以肯定你想要的; 将此设置False
为非常糟糕的数据完整性。也就是说,这里有一些你可能想要这样做的场景:- 您的遗留数据无效。
- 您正在分片数据库。
如果设置为
False
,则访问不存在的相关对象将引发其DoesNotExist
异常。
ForeignKey.
swappable
¶-
如果
ForeignKey
指向可交换模型,则控制迁移框架的反应。如果是True
- 默认值 - 那么如果ForeignKey
指向与当前值settings.AUTH_USER_MODEL
(或另一个可交换模型设置)匹配的模型,则关系将使用对设置的引用存储在迁移中,而不是直接存储在模型中。False
如果您确定模型应始终指向交换模型,则只需要覆盖此项- 例如,如果它是专门为您的自定义用户模型设计的配置文件模型。将其设置为
False
并不意味着您可以引用可交换模型,即使它已被换出 -False
只是意味着使用此ForeignKey进行的迁移将始终引用您指定的确切模型(因此如果用户尝试使用例如,您不支持的用户模型。如有疑问,请将其保留为默认值
True
。
ManyToManyField
¶
多对多的关系。需要一个位置参数:与模型相关的类,它与它的作用完全相同 ForeignKey
,包括递归和 惰性关系。
可以使用字段添加,删除或创建相关对象 RelatedManager
。
数据库表示¶
在幕后,Django创建了一个中间连接表来表示多对多关系。默认情况下,此表名称是使用多对多字段的名称以及包含它的模型的表名生成的。由于某些数据库不支持超过一定长度的表名,因此将自动截断这些表名,并使用唯一性哈希,例如author_books_9cdf
。您可以使用该db_table
选项手动提供连接表的名称。
参数¶
ManyToManyField
接受一组额外的参数 - 所有可选的 - 控制关系如何运作。
ManyToManyField.
related_name
¶-
与...相同
ForeignKey.related_name
。
ManyToManyField.
related_query_name
¶
ManyToManyField.
limit_choices_to
¶-
与...相同
ForeignKey.limit_choices_to
。limit_choices_to
在使用参数ManyToManyField
指定的自定义中间表上使用 时无效through
。
ManyToManyField.
symmetrical
¶-
仅用于自我的ManyToManyFields定义。考虑以下模型:
from django.db import models class Person(models.Model):
friends = models.ManyToManyField("self")当Django处理这个模型时,它会识别它有一个
ManyToManyField
on,因此它不会person_set
向Person
该类添加一个 属性。相反,ManyToManyField
假设是对称的 - 也就是说,如果我是你的朋友,那么你就是我的朋友。如果你不想在多对多关系中对称
self
,设置symmetrical
为False
。这将迫使Django为反向关系添加描述符,允许ManyToManyField
关系是非对称的。
ManyToManyField.
through
¶-
Django将自动生成一个表来管理多对多关系。但是,如果要手动指定中间表,可以使用该
through
选项指定表示要使用的中间表的Django模型。此选项最常见的用途是,您希望将 额外数据与多对多关系相关联。
如果未指定显式
through
模型,则仍可使用隐式through
模型类来直接访问为保存关联而创建的表。它有三个字段来链接模型。如果源模型和目标模型不同,则会生成以下字段:
id
:关系的主键。<containing_model>_id
:id
声明的模型ManyToManyField
。<other_model>_id
:指向id
的模型ManyToManyField
。
如果
ManyToManyField
来自同一模型的点,则生成以下字段:id
:关系的主键。from_<model>_id
:id
指向模型的实例(即源实例)。to_<model>_id
:id
关系指向的实例(即目标模型实例)。
此类可用于查询给定模型实例的关联记录,如普通模型。
ManyToManyField.
through_fields
¶-
仅在指定自定义中间模型时使用。Django通常会确定要使用哪个中间模型字段,以便自动建立多对多关系。但是,请考虑以下型号:
from django.db import models class Person(models.Model):
name = models.CharField(max_length=50) class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(
Person,
through='Membership',
through_fields=('group', 'person'),
) class Membership(models.Model):
group = models.ForeignKey(Group, on_delete=models.CASCADE)
person = models.ForeignKey(Person, on_delete=models.CASCADE)
inviter = models.ForeignKey(
Person,
on_delete=models.CASCADE,
related_name="membership_invites",
)
invite_reason = models.CharField(max_length=64)Membership
有两个外键Person
(person
和inviter
),这使得关系模糊不清,Django无法知道使用哪一个。在这种情况下,您必须明确指定Django应使用哪些外键through_fields
,如上例所示。through_fields
接受一个2元组,其中 是定义的模型的外键名称 (在本例中),以及 目标模型的外键名称( 在本例中)。('field1', 'field2')
field1
ManyToManyField
group
field2
person
如果中间模型上有多个外键到参与多对多关系的任何(甚至两个)模型,则必须指定
through_fields
。这也适用于 使用中间模型时的递归关系,并且模型有两个以上的外键,或者您想要明确指定Django应该使用哪两个。使用中间模型的递归关系总是被定义为非对称的 - 也就是说,
symmetrical=False
因此,存在“源”和“目标”的概念。在这种情况下,'field1'
将被视为关系的“来源”和'field2'
“目标”。
ManyToManyField.
db_table
¶-
要创建用于存储多对多数据的表的名称。如果没有提供,Django将根据以下名称采用默认名称:定义关系的模型表和字段本身的名称。
ManyToManyField.
db_constraint
¶-
控制是否应在数据库中为中间表中的外键创建约束。默认是
True
,这几乎可以肯定你想要的; 将此设置False
为非常糟糕的数据完整性。也就是说,这里有一些你可能想要这样做的场景:- 您的遗留数据无效。
- 您正在分片数据库。
它是通过两种错误
db_constraint
和through
。
ManyToManyField.
swappable
¶-
如果
ManyToManyField
指向可交换模型,则控制迁移框架的反应。如果是True
- 默认值 - 那么如果ManyToManyField
指向与当前值settings.AUTH_USER_MODEL
(或另一个可交换模型设置)匹配的模型,则关系将使用对设置的引用存储在迁移中,而不是直接存储在模型中。False
如果您确定模型应始终指向交换模型,则只需要覆盖此项- 例如,如果它是专门为您的自定义用户模型设计的配置文件模型。如有疑问,请将其保留为默认值
True
。
null
因为没有办法在数据库级别要求关系,所以没有任何效果。
OneToOneField
¶
一对一的关系。从概念上讲,这类似于 ForeignKey
with unique=True
,但关系的“反向”方面将直接返回单个对象。
这作为模型的主键是最有用的,它以某种方式“扩展”另一个模型; 例如,通过从子模型向父模型添加隐式一对一关系来实现多表继承。
需要一个位置参数:与模型相关的类。这与它的工作方式完全相同ForeignKey
,包括有关递归 和惰性关系的所有选项。
如果没有related_name
为其指定参数 OneToOneField
,Django将使用当前模型的小写名称作为默认值。
使用以下示例:
from django.conf import settings
from django.db import models class MySpecialUser(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
supervisor = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='supervisor_of',
)
生成的User
模型将具有以下属性:
>>> user = User.objects.get(pk=1)
>>> hasattr(user, 'myspecialuser')
True
>>> hasattr(user, 'supervisor_of')
True
一个DoesNotExist
访问反向关系时,如果在相关表中的条目不存在异常。例如,如果用户没有指定的主管MySpecialUser
:
>>> user.supervisor_of
Traceback (most recent call last):
...
DoesNotExist: User matching query does not exist.
另外,OneToOneField
接受所有接受的额外参数ForeignKey
,加上一个额外的参数:
OneToOneField.
parent_link
¶-
在
True
继承自另一个 具体模型的模型中使用时,表示该字段应该用作返回父类的链接,而不是OneToOneField
通常由子类隐式创建的额外字段 。
有关使用示例,请参阅一对一关系OneToOneField
。
Field API参考¶
- class
Field
[source]¶ -
Field
是一个表示数据库表列的抽象类。Django使用字段来创建数据库表(db_type()
),将Python类型映射到数据库(get_prep_value()
),反之亦然(from_db_value()
)。因此,字段是不同Django API中的基础部分,特别是
models
和querysets
。在模型中,字段被实例化为类属性并表示特定的表列,请参阅模型。它具有Django用于将字段值映射到特定于数据库的值的属性,例如
null
和unique
,以及方法。阿
Field
是的一个子类RegisterLookupMixin
,因此两者Transform
并Lookup
可以登记在其上中使用QuerySet
S(例如field_name__exact="foo"
)。默认情况下会注册所有内置查找。所有Django的内置字段,例如
CharField
,都是特定的实现Field
。如果您需要自定义字段,则可以子类化任何内置字段或Field
从头开始编写。无论是哪种情况,请参阅编写自定义模型字段。description
¶-
该字段的详细描述,例如
django.contrib.admindocs
应用程序。描述可以是以下形式:
description = _("String (up to %(max_length)s)")
参数是从字段中插入的
__dict__
。
为了将数据映射
Field
到特定于数据库的类型,Django公开了几种方法:Django需要与数据库后端和字段进行交互的主要情况有三种:
- 当它查询数据库时(Python值 - >数据库后端值)
- 当它从数据库加载数据时(数据库后端值 - > Python值)
- 当它保存到数据库时(Python值 - >数据库后端值)
查询时,
get_db_prep_value()
并get_prep_value()
使用:get_prep_value
(值)[来源]¶-
value
是模型属性的当前值,该方法应以已准备好用作查询中的参数的格式返回数据。请参阅转换Python对象以查询使用值。
get_db_prep_value
(值,连接,准备=假)[来源]¶-
转换
value
为特定于后端的值。默认情况下,它返回value
ifprepared=True
和get_prep_value()
ifFalse
。请参阅将查询值转换为数据库值以供使用。
加载数据时,
from_db_value()
使用:from_db_value
(值,表达,连接)¶-
将数据库返回的值转换为Python对象。这是相反的
get_prep_value()
。此方法不用于大多数内置字段,因为数据库后端已经返回正确的Python类型,或者后端本身进行转换。
请参阅将值转换为Python对象以供使用。
注意
出于性能原因,
from_db_value
没有在不需要它的字段上实现no-op(所有Django字段)。因此,您可能不会super
在您的定义中提及。
保存时,
pre_save()
和get_db_prep_save()
使用:get_db_prep_save
(值,连接)[来源]¶-
与the相同
get_db_prep_value()
,但必须将字段值保存到数据库时调用。默认返回get_db_prep_value()
。
pre_save
(model_instance,add)[来源]¶-
get_db_prep_save()
在保存之前调用值之前调用的方法(例如forDateField.auto_now
)。model_instance
是此字段所属add
的实例,是实例是否第一次保存到数据库。它应该返回
model_instance
此字段的相应属性的值 。属性名称在self.attname
(由此设置Field
)。
字段通常从序列化或表单中将其值作为不同类型接收。
to_python
(值)[来源]¶-
将值转换为正确的Python对象。它起反作用
value_to_string()
,也称为 反转clean()
。请参阅将值转换为Python对象以供使用。
除了保存到数据库之外,该字段还需要知道如何序列化其值:
value_from_object
(obj)[来源]¶-
返回给定模型实例的字段值。
这种方法经常被使用
value_to_string()
。
value_to_string
(obj)[来源]¶-
转换
obj
为字符串。用于序列化字段的值。请参阅转换字段数据以进行序列化以便使用。
使用时, 需要知道应该表示哪个表单字段:
model forms
Field
formfield
(form_class = None,choices_form_class = None,** kwargs)[来源]¶-
返回
django.forms.Field
此字段 的默认值ModelForm
。默认情况下,如果同时
form_class
和choices_form_class
是None
,它使用CharField
。如果字段choices
并choices_form_class
没有指定,它使用TypedChoiceField
。请参阅为模型字段指定表单字段以供使用。
字段属性引用¶
每个Field
实例都包含几个允许内省其行为的属性。isinstance
当您需要编写依赖于字段功能的代码时,请使用这些属性而不是检查。这些属性可与Model._meta API一起使用,以缩小对特定字段类型的搜索范围。自定义模型字段应实现这些标志。
字段的属性¶
Field.
auto_created
¶-
布尔标志,指示是否自动创建字段,例如
OneToOneField
模型继承使用的字段。
Field.
concrete
¶-
布尔标志,指示该字段是否具有与之关联的数据库列。
Field.
hidden
¶-
布尔标志,指示字段是否用于支持另一个非隐藏字段的功能(例如,构成a的字段
content_type
和object_id
字段GenericForeignKey
)。该hidden
标志用于区分模型上的公共子集和模型上的所有字段的构成。注意
Options.get_fields()
默认情况下排除隐藏字段。传入include_hidden=True
以返回结果中的隐藏字段。
Field.
is_relation
¶-
布尔标志,表明如果一个字段包含一个或多个其他模型的功能(例如引用
ForeignKey
,ManyToManyField
,OneToOneField
,等)。
Field.
model
¶-
返回定义字段的模型。如果在模型的超类上定义了字段,
model
则将引用超类,而不是实例的类。
具有关系的字段的属性¶
这些属性用于查询基数和关系的其他详细信息。这些属性出现在所有字段中; 但是,None
如果字段是关系类型(Field.is_relation=True
),它们将只有布尔值(而不是)。
Field.
many_to_many
¶-
布尔标志,
True
如果该字段具有多对多关系;False
除此以外。唯一的领域包括Django的地方,这是True
是ManyToManyField
。
Field.
many_to_one
¶-
布尔标志,
True
如果该字段具有多对一关系,例如aForeignKey
;False
除此以外。
Field.
one_to_many
¶-
布尔标志,
True
如果该字段具有一对多关系,例如aGenericRelation
或反向aForeignKey
;False
除此以外。
Field.
one_to_one
¶-
布尔标志,
True
如果该字段具有一对一的关系,例如aOneToOneField
;False
除此以外。
Field.
related_model
¶-
指向该领域涉及的模型。例如,
Author
在 。在一个始终。ForeignKey(Author,on_delete=models.CASCADE)
related_model
GenericForeignKey
None
django--模型字段引用的更多相关文章
- Django模型定义参考
字段 对字段名称的限制 字段名不能是Python的保留字,否则会导致语法错误 字段名不能有多个连续下划线,否则影响ORM查询操作 Django模型字段类 字段类 说明 AutoField 自增ID字段 ...
- Django模型层之字段查询参数及聚合函数
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. 字段查询是指如何指定SQL WHERE子句的 ...
- django模型和字段
一个模型(model)就是一个单独的.确定的数据的信息源,包含了数据的字段和操作方法.通常,每个模型映射为一张数据库中的表. 基本的原则如下: 每个模型在Django中的存在形式为一个Python类 ...
- django项目模型字段
一个模型(model)就是一个单独的.确定的数据的信息源,包含了数据的字段和操作方法.通常,每个模型映射为一张数据库中的表. 基本的原则如下: 每个模型在Django中的存在形式为一个Python类 ...
- 如何让django模型中的字段和model名显示为中文
如何让django模型中的字段和model名显示为中文:在模型中加入class Meta即可 class People(models.Model): name = models.CharField(n ...
- 03 Django模型层: 常用(非常用)字段和参数
Django模型层: 常用(非常用)字段和参数 1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为i ...
- Django 模型和数据库 总结
模型和数据库 模型 首先我们在创建一个model的时候,这个类都是继承自 django.db.models.Model, 各种Model Field类型 AutoField,自动增长的IntegerF ...
- 一 Django模型层简介(一)
模型 django提供了一个强大的orm(关系映射模型)系统. 模型包含了你要在数据库中创建的字段信息及对数据表的一些操作 使用模型 定义好模型后,要告诉django使用这些模型,你要做的就是在配置文 ...
- 二 Djano模型层之模型字段选项
字段选项 以下参数是全部字段类型都可用的,而且是可选的 null 如果为True,Django将在数据库中将空值存储为NULL.默认值为False 对于字符串字段,如果设置了null=True意味着& ...
- Django 学习第八天——Django模型基础第三节
一.表关系的实现: 一对一:OneToOne(外键+唯一键) xxx = models.OneToOneField('关联的表',on_delete=models.CASCADE) 外键和一对一关系的 ...
随机推荐
- js scheme 打开手机app的方法
1.iframe function schemeUrl(url,callbak){ var ifr = document.createElement("iframe"); ifr. ...
- jenkins:新增节点是启动方式没有Launch agent by connecting it to the master
默认在这里的配置是禁用 所以启动方式只有两种,缺少Launch agent by connecting it to the master
- Python微服务实践-集成Consul配置中心
A litmus test for whether an app has all config correctly factored out of the code is whether the co ...
- Apollo环境配置
一.背景 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...
- 【Linux】僵尸进程,孤儿进程以及wait函数,waitpid函数(有样例,分析很详细)
本文内容: 1.僵尸进程,孤儿进程的定义,区别,产生原因,处理方法 2.wait函数,waitpid函数的分析,以及比较 背景:由于子进程的结束和父进程的运行是一个异步的过程,即父进程永远无法预测子进 ...
- react-native样式里面的一些坑
在我们做react-native项目时,引入css样式之后 控制台报下面的这样的错 解决问题的方法是: 报错的代码 改后的代码
- poj 3744 题解
题目 题意: $ yyf $ 一开始在 $ 1 $ 号节点他要通过一条有 $ n $ 个地雷的道路,每次前进他有 $ p $ 的概率前进一步,有 $ 1-p $ 的概率前进两步,问他不领盒饭的概率. ...
- Keil 5出现Error: L6218E: Undefined symbol解决方法
首先列出网上百度到比较好的blog: blog1:https://blog.csdn.net/super_demo/article/details/32131379 总结了代码中可能因为几种初级或者粗 ...
- tft_LCD一些引脚极性设置方法:vsync, hsync, VBLANK
转载:https://blog.csdn.net/u014170207/article/details/52662988/ 在RGB模式中,LCD数据的扫描是以行为单位的.HSYNC是水平同步信号.P ...
- golang程序因未知错误崩溃时如何记录异常
开发服务器程序时如果未经过充分测试, 服务稳定运行一段时间后会突然崩溃退出.一般是因为程序中出现了某个未捕获的异常. 这类问题属于偶现的,且需要服务器运行一段时间之后才会出现,难以定位有问题的代码段. ...