Django ModelForm组件添加用户

ModelForm

  • models.py
  • views.py
  • html
  • 解释
  • 关于输入可选

models.py

class Department(models.Model):
    # '''部门表'''
    title = models.CharField(verbose_name='标题', max_length=32)

    def __str__(self):
        return self.title



class UserInfo(models.Model):
    ''' 员工表 '''
    name = models.CharField(verbose_name='姓名', max_length=16)
    password = models.CharField(verbose_name='密码', max_length=64)
    age = models.IntegerField(verbose_name='年龄')
    account = models.DecimalField(verbose_name='账户余额', max_digits=10, default=0, decimal_places=2)
    create_time = models.DateTimeField(verbose_name='入职时间')


    depart = models.ForeignKey(verbose_name="部门", to='Department', to_field="id", on_delete=models.CASCADE)

    gender_choices = (
        (1, '男'),
        (2, '女'),
    )
    gender = models.SmallIntegerField(verbose_name='性别', choices=gender_choices)

views.py

from django import forms

class UserModelForm(forms.ModelForm):
    name = forms.CharField(min_length=3, label="用户名")

    class Meta:
        model = models.UserInfo
        fields = ['name', 'password', 'age', 'account', 'create_time', 'gender', 'depart']

    def __init__(self, *args, **kwargs):    # 重新定义函数,循环标签,改变样式
        super().__init__(*args, **kwargs)

        for name, field in self.fields.items():
            field.widget.attrs = {'class': 'form-control', "placeholder": field.label}



def user_add(request):
    """添加用户"""
    if request.method == "GET":
        form = UserModelForm()  # 实例化
        return render(request, 'user_form.html', {'form': form})

    # 数据校验
    form = UserModelForm(data=request.POST)
    if form.is_valid():
        form.save()
        return redirect('/user/list/')


    return render(request, 'user_form.html', {'form': form})

html

<form class="form-horizontal" method="post" novalidate>
    {% csrf_token %}
    {% for field in form %}
    <div class="form-group">
    
        <label>{{field.label}}</label>
        {{field}}
        <span style="color: red;" >{{field.errors.0}}</span>
        <!--<input type="text" class="form-control"  placeholder="标题" name="title" />-->
        
    </div>
    {% endfor %}
    <button type="submit" class="btn btn-primary">提 交</button>
</form>

解释

使得打印Department对象时,打印内容为title。
Django ModelForm组件添加用户_第1张图片

- ModelForm对象传到html页面。是一个迭代对象,需要循环输出。每一个循环出来的单体相当于一个封装好的标签。故若想要改变标签的样式等,可以在创建对象那里改变,如下图。
.items()返回字典的键值对。
Django ModelForm组件添加用户_第2张图片
数据校验
通过POST请求获取到输入的数据。返回的modelform对象中也包含了是否输入错误的信息。如果正确,则保存到数据库。如果错误,则在页面显示。
Django ModelForm组件添加用户_第3张图片
Django ModelForm组件添加用户_第4张图片
需要使用
在这里插入图片描述
settings中设置中文
Django ModelForm组件添加用户_第5张图片

关于输入可选

Django ModelForm组件添加用户_第6张图片
创建时,就以Id关联着另一个表。相当于获得了关联表对象。 而关联表中,有多行数据,传进html时,就自动生成选项。
在这里插入图片描述

Django ModelForm组件添加用户_第7张图片
加下面后,才变为最终效果。
Django ModelForm组件添加用户_第8张图片

你可能感兴趣的:(Django,django,python,后端)