欢迎访问宙启技术站
智能推送

Django.contrib.adminregister()方法的数据验证详解

发布时间:2023-12-24 09:26:25

django.contrib.admin模块提供了一个方便的管理后台,可以帮助我们在 Django 项目中进行数据管理。其中,register()方法用于将模型注册到管理后台,使该模型的数据可以在后台进行增删改查操作。

register()方法的签名如下:

register(model_or_iterable, admin_class=None, **options)

参数说明:

- model_or_iterable:要注册的模型类或可迭代的模型类。

- admin_class:管理类,用于自定义模型在后台的展示和操作。

- **options:其他选项,比如在管理列表中显示的字段、过滤器等。

下面是一个使用示例:

from django.contrib import admin
from .models import Book

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'price')
    list_filter = ('author', 'price')
    search_fields = ('title', 'author')

上述代码中,我们导入了 admin 模块和 Book 模型,并使用 @admin.register() 装饰器将 Book 模型注册到管理后台,并赋予该模型自定义的管理类 BookAdmin

BookAdmin 中,我们指定了要显示在列表中的字段(list_display),设置了过滤器(list_filter),以及允许在指定字段中搜索(search_fields)。

通过以上配置,我们可以在管理后台中看到 Book 模型的数据,并可以根据指定的字段进行增删改查操作。此外,我们还可以根据指定的字段进行过滤和搜索操作。

数据验证是在 Django 的表单层面上进行的,在管理后台中,数据验证过程会通过默认的表单类进行,我们也可以通过重写默认的表单类来自定义数据验证。

以下是一个自定义数据验证的示例:

from django.contrib import admin
from django.forms import ModelForm
from .models import Book

class BookForm(ModelForm):
    def clean_price(self):
        price = self.cleaned_data.get('price')
        if price < 0:
            raise ValidationError("价格不能为负数")
        return price

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    form = BookForm

上述代码中,我们定义了一个自定义的表单类 BookForm,并重写了字段 price 的数据验证方法 clean_price。在该方法中,我们获取了字段的值,并判断其是否小于 0,如果小于 0,则抛出 ValidationError 异常,并显示错误信息。

BookAdmin 中,将自定义的表单类 BookForm 赋给 form 属性,这样在后台进行数据验证时,会使用自定义的表单类。

通过以上配置,当我们在后台输入了一个负数作为书籍的价格时,将会得到一个验证错误,并提示价格不能为负数。

综上所述,django.contrib.admin 模块中的 register() 方法以及自定义的表单类可以帮助我们实现数据验证的功能,确保在管理后台输入的数据符合要求。