choices选择器
- 用于页面上的选择框标签,需要先提供一个二维的二元元组,第一个元素表示存在数据库内真实的值,第二个表示页面上显示的具体内容。在浏览器页面上将显示第二个元素的值
- 举个例子
class user_privileges(models.Model):
CHOICES_LIST = (
('SC', 'fast_script'),
('BK', 'blueking'),
('DT', 'demonstration'),
)
users = models.ManyToManyField(USER_DATA, verbose_name=u'对应用户表', null=True)
biz_name = models.CharField(verbose_name=u"业务名称", choices=CHOICES_LIST, max_length=100, null=True)
class Meta:
verbose_name = u"用户操作"
db_table = 'user_privileges'
`
- 要获取一个choices的第二元素的值,可以使用get_FOO_display()方法,其中FOO代表这个字段的名称
def data_list(request):
user = models.USER_DATA.objects.get(user_name='chen')
models.USER_INFORMATION.objects.create(user=user, biz_name="SC") # 存储的时候也需要存前一个值
order = models.USER_INFORMATION.objects.filter(users=1).first()
choices_data = order.shirt_size # 会显示SC
html_data = order.get_biz_name_display() # 会显示fast_script
外键中的on_delete
- CASCADE:这就是默认的选项,级联删除,你无需显性指定它。
我们使用外键默认就是级联删除
- PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。
- SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。
- SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
- SET(): 自定义一个值,该值当然只能是对应的实体了
- 其中SET()就是在做删除操作的时候给一个执行的方法
**官方案例**
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),
)