Django 记录
Django 各种记录
DateField的默认值
不要使用 timezone.now(), 而是直接 default=timezone.now, 这样在创建时会自动调用函数,而不是一个固定的值。
CharField 等字符串字段
如果同时设置了 blank=True, unique=True 则还需要 null=True
验证
验证的规范书写
如果直接将参数代入可能会导致之后的错误信息被覆盖, 方便翻译
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
raise ValidationError(
_('Invalid value: %(value)s'),
code='invalid',
params={'value': '42'},
)
验证相关联的字段
from django import forms
from django.core.exceptions import ValidationError
class ContactForm(forms.Form):
# Everything as before.
...
def clean(self):
cleaned_data = super().clean()
cc_myself = cleaned_data.get("cc_myself")
subject = cleaned_data.get("subject")
if cc_myself and subject:
# Only do something if both fields are valid so far.
if "help" not in subject:
raise ValidationError(
"Did not send for 'help' in the subject despite "
"CC'ing yourself."
)
在代码中使用 save 创建新的项时
grade = Grade(student=a, lesson=b, grade=90)
# 这一步可以进行全面的检查
grade.full_clean()
grade.save()
FileField 文件在修改删除的同时将存储在服务器中的文件也同时删除
因为某些原因,在删除文件项时 django 并不会删除旧的文件,因此需要额外去删除它。 django使用后台admin修改/删除记录的同时更新文件
后台上传文件并预览
注册url: url(r'^upload/(? P