1. 概述
Django是一个使用Python语言编写的Web框架。在Django中,模型(Model)是数据库里关于数据类型、格式等的定义。字段(Field)则是模型的属性。本文将介绍在Django中模型字段的各种选项。
2. 常用选项
2.1 null
null
选项可以定义该字段是否可以为空。默认为False。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100, null=True)
2.2 blank
blank
选项可以定义该字段对应表单元素是否可以为空。默认为False。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100, blank=True)
2.3 default
default
选项可以定义该字段默认的值。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100, default='default value')
2.4 choices
choices
选项可以定义该字段的取值范围。
from django.db import models
class MyModel(models.Model):
COLOR_CHOICES = [
('R', 'Red'),
('G', 'Green'),
('B', 'Blue'),
]
my_field = models.CharField(max_length=1, choices=COLOR_CHOICES)
2.5 verbose_name
verbose_name
选项可以定义该字段的人类可读名称。如果不指定该选项,Django会根据字段名自动生成。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100, verbose_name='My Field')
2.6 help_text
help_text
选项可以定义该字段的帮助文本,通常用于表单中。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100, help_text='Enter a short description.')
2.7 db_index
db_index
选项可以定义该字段是否需要建立索引,以加快查询速度。默认为False。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100, db_index=True)
2.8 unique
unique
选项可以定义该字段是否需要唯一。默认为False。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100, unique=True)
3. 数据库相关选项
3.1 primary_key
primary_key
选项可以定义该字段为主键。
from django.db import models
class MyModel(models.Model):
id = models.AutoField(primary_key=True)
my_field = models.CharField(max_length=100)
3.2 db_column
db_column
选项可以定义该字段在数据库中所对应的列名。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100, db_column='my_column')
3.3 db_tablespace
db_tablepace
选项可以定义该字段在数据库中所使用的表空间。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100, db_tablespace='my_space')
3.4 db_index_together
db_index_together
选项可以定义该字段与其他字段联合索引。
from django.db import models
class MyModel(models.Model):
my_field_1 = models.CharField(max_length=100)
my_field_2 = models.CharField(max_length=100)
class Meta:
index_together = [
("my_field_1", "my_field_2"),
]
3.5 db_table
db_table
选项可以定义该模型对应的数据库表名。如果不指定该选项,Django会根据应用和模型名自动生成。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100)
class Meta:
db_table = 'my_table'
4. 其他选项
4.1 editable
editable
选项可以定义该字段是否可编辑。默认为True。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100, editable=False)
4.2 auto_created
auto_created
选项可以定义该字段是否为自动生成。默认为False。
from django.db import models
class MyModel(models.Model):
my_field = models.CharField(max_length=100, auto_created=True)
4.3 validators
validators
选项可以定义该字段的校验器。
from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator
class MyModel(models.Model):
my_field = models.IntegerField(
validators=[MaxValueValidator(100), MinValueValidator(0)]
)
4.4 related_name
related_name
选项可以定义该字段与另一个模型的反向引用名称。如果不指定该选项,Django会根据模型名和字段名自动生成。
from django.db import models
class OtherModel(models.Model):
my_field = models.ForeignKey(
MyModel,
on_delete=models.CASCADE,
related_name='othermodels'
)
4.5 on_delete
on_delete
选项可以定义该字段和其他模型关联时,如何处理该模型的记录。
from django.db import models
class MyModel(models.Model):
pass
class OtherModel(models.Model):
my_field = models.ForeignKey(
MyModel,
on_delete=models.CASCADE
)
4.6 validators
validators
选项可以定义该字段的校验器。
from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator
class MyModel(models.Model):
my_field = models.IntegerField(
validators=[MaxValueValidator(100), MinValueValidator(0)]
)
5. 总结
本文介绍了Django模型字段中的各种选项,并举例说明了如何使用这些选项。了解这些选项可以让我们更好地理解Django模型的内部结构,并在实际开发中更加灵活地使用它们。