# Django adminform表单的应用记录

Posted wangph

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# Django adminform表单的应用记录相关的知识,希望对你有一定的参考价值。

目录

Django admin、form表单的应用记录

一 Django admin

1. 使用介绍

1. 创建超级用户

python manage.py createsuperuser
username: wph
password: 123123qwe

2. 页面汉化,更改settings.py

# LANGUAGE_CODE = ‘en-us‘
LANGUAGE_CODE = ‘zh-hans‘

在app的admin.py中 导入要管理的表

from django.contrib import admin
from app01 import models

# Register your models here.

# 将app01中的表 注册到admin中,之后就能在admin页面对表管理
admin.site.register(models.Publisher)

3. 显示字段的中文

要在管理页面显示字段的中文名称:
在字段中加入verbose_names

class Publisher(models.Model):
    name = models.CharField(max_length=32, unique=True, verbose_name=‘出版社名称‘)
    address = models.TextField()

4. 显示表的中文名称,加入Meta类

显示表的中文名称,加入Meta类

class Publisher(models.Model):
    name = models.CharField(max_length=32, unique=True, verbose_name=‘出版社名称‘)
    address = models.TextField(verbose_name=‘出版社地址‘)
    
    class Meta:
        verbose_name = ‘出版社‘
        # 显示复数会加s,需要加入如下字段;
        verbose_name_plural = verbose_name

5. 显示对象的名称

显示添加的信息为对象 Publisher object ,改为详细信息

# 在models中加入如下类
    def __str__(self):
        return self.name

6. 必填项更改

技术分享图片

# 在models的字段中,null=True 控制数据库可以为空,black=True 控制django admin可以为空

    phone = models.CharField(max_length=11, null=True, blank=True)  

form组件使用

1. form的作用

  1. 生成html代码
  2. 帮我们做数据有效性的校验
  3. 保留上次输入的内容,显示错误提示

2. form组件生成HTMKL代码

3. form组件校验数据有效性

1. 内置的校验规则

内置的校验规则
1. require=True 该字段必填
2. max_length 该字段最大长度
3. min_length 该字段最小长度

2. 自定义校验规则(正则)

  1. 手机号的格式校验 利用内置的正则校验
from django.core.validators import RegexValidator

    phone = forms.CharField(
        max_length=11,
        label=‘电话‘,
        required=False,  # 设置非必填项
        widget=forms.widgets.TextInput(attrs={‘class‘: ‘form-control‘}),
        validators=[RegexValidator(r‘^1[3456789]d{9}$‘, ‘手机号码格式不正确‘)]  #自定义校验规则
    )
  1. 手机号的唯一性校验
    自定义校验规则
from django.core.exceptions import ValidationError

def phone_validate(value):
    # 拿用户天界的手机号去数据库匹配查找
    is_exist = models.Book.objects.filter(phone=value)
    if is_exist:
        raise ValidationError(‘该手机号已经注册‘)
    else:
        return value
        
# 使用自定义校验
    phone = forms.CharField(
        max_length=11,
        label=‘电话‘,
        required=False,  # 设置非必填项
        widget=forms.widgets.TextInput(attrs={‘class‘: ‘form-control‘}),
        validators=[RegexValidator(r‘^1[3456789]d{9}$‘, ‘手机号码格式不正确‘), phone_validate]  # 自定义校验规则
    )

3. 使用钩子(hook)函数做校验

  1. 局部钩子
class BookForm(forms.Form):
    def a
        pass
    
    # 自定义一个局部钩子函数
    def clean_title(self):
        value = self.cleaned_data.get(‘title‘)
        if ‘jpm‘ in value:
            raise ValidationError(‘jpm已被河蟹‘)
  1. 全局钩子
class BookForm(forms.Form):
    def foo():
        pass
    
    # 全局钩子
    def clean(self):
        self.cleaned_data  # 可以去到所有字段数据 可以用来判断二次确认密码是否争取
        self.add_error(‘字段‘, ‘两次输入密码不一致‘)
        pass

3. form组件如何给html标签设置默认值

1. 每一个字段设置默认值

def edit_book(request, pk):
    book_obj = models.Book.objects.filter(id=pk).first()
    book_dict = model_to_dict(book_obj)  # 把一个对象快速转换成字典
    book_dict[‘publish_date‘] = book_obj.publish_date.strftime(‘%Y-%m-%d‘)
    form_obj = BookForm(book_dict)  ## 给form实例传一个字典,设置默认值





以上是关于# Django adminform表单的应用记录的主要内容,如果未能解决你的问题,请参考以下文章

Django admin - 如何在自定义管理表单中为多对多字段添加绿色加号

将单选按钮从一个 PHP 表单添加到另一个 PHP 表单

更新多条记录的 Django 表单

Django-admin:如何在记录更改列表中显示指向对象信息页面的链接而不是编辑表单?

Django 模型表单不更新数据库记录

如何使用 html 表单更新基于 django 模型的表单(具有选择选项)记录