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.*)$', serve, {"document_root": MEDIA_ROOT})