Django ModelForm组件添加用户

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。
在这里插入图片描述

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

关于输入可选

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

在这里插入图片描述
加下面后,才变为最终效果。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值