zoukankan      html  css  js  c++  java
  • ModelForm

    Model,操作数据
    	
    Form,用户请求验证+生成HTML标签
    
    
    应用场景:
    	大型应用:
    		Model,操作数据
    		Form,用户请求验证+生成HTML标签
    	小型应用:
    		ModelForm,操作数据+用户请求验证+生成HTML标签
    

    a. 事例

    from django.conf.urls import url,include
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^test/', views.test),
        url(r'^edit-(d+)/', views.edit),
    ]
    urls.py
    from django.db import models
    
    class UserGroup(models.Model):
    
        title = models.CharField(max_length=32)
    
        def __str__(self):
            return self.title
    class Role(models.Model):
        name = models.CharField(max_length=32)
    
        def __str__(self):
            return self.name
    class UserInfo(models.Model):
        user = models.CharField(max_length=32)
        email = models.EmailField()
        ug = models.ForeignKey(UserGroup,null=True,blank=True)
    
        m2m = models.ManyToManyField('Role')
    
        def __str__(self):
            return self.user
    models.py
    from django.shortcuts import render,HttpResponse,redirect
    from app01 import models
    from django.template.response import TemplateResponse
    from django.forms import Form,ModelForm
    from django.forms import fields as ffields
    from django.forms import widgets as fwidgets
    
    """
    class TestForm(Form):
        user = fields.CharField()
        email = fields.EmailField()
        ug_id = fields.ChoiceField(
            widget=widgets.Select,
            choices=[]
        )
    
        def __init__(self,*args,**kwargs):
            super(TestForm,self).__init__(*args,**kwargs)
    
            self.fields['ug_id'].choices = models.UserGroup.objects.values_list('id','title')
    
    
    def test(request):
        if request.method == "GET":
            form = TestForm()
            context = {
                'form': form
            }
            return render(request,'test.html',context)
        else:
            form = TestForm(request.POST)
            if form.is_valid():
                # {ug:1}
                models.UserInfo.objects.create(**form.cleaned_data)
                return redirect('http://www.oldboyedu.com')
            context = {
                'form': form
            }
            return render(request, 'test.html', context)
    """
    
    class TestModelForm(ModelForm):
        user = ffields.EmailField(label='用户名')
    
        class Meta:
            model = models.UserInfo
            fields = "__all__"
            error_messages = {
                'user':{'required':'用户名不能为空'},
                'email':{'required':'邮箱不能为空','invalid':'邮箱格式错误'},
            }
            labels = {
                'user': '用户名',
                'email': "邮箱"
            }
            help_texts = {
                'user': "帮你一下"
            }
            # widgets = {
            #     'user': fwidgets.Textarea(attrs={'class':'c1'})
            # }
            # field_classes = {
            #     'user': ffields.EmailField
            # }
    
        # def clean_user(self):
        #     pass
        #
        # def clean_email(self):
        #     pass
    def test(request):
        if request.method == "GET":
            form = TestModelForm()
            context = {
                'form': form
            }
            return render(request,'test.html',context)
        else:
            form = TestModelForm(request.POST)
            if form.is_valid():
                form.save()
                return redirect('http://www.oldboyedu.com')
            context = {
                'form': form
            }
            return render(request, 'test.html', context)
    
    
    def edit(request,nid):
        obj = models.UserInfo.objects.filter(id=nid).first()
        if request.method == "GET":
            form = TestModelForm(instance=obj)
            context = {
                'form': form
            }
            return render(request, 'edit.html', context)
        else:
            form = TestModelForm(instance=obj,data=request.POST,files=request.FILES)
            if form.is_valid():
                form.save()
                return redirect('http://www.oldboyedu.com')
            context = {
                'form': form
            }
            return render(request, 'test.html', context)
    views.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form method="POST" novalidate>
            {% csrf_token %}
            {{ form.as_p }}
    {#        <p>{{ form.user }}{{ form.user.errors.0 }}</p>#}
    {#        <p>{{ form.email }}{{ form.email.errors.0 }}</p>#}
    {#        <p>{{ form.ug }}{{ form.ug.errors.0 }}</p>#}
    {#        <p>{{ form.m2m }}{{ form.m2m.errors.0 }}</p>#}
            <input type="submit"  value="提交" />
        </form>
    </body>
    </html>
    test.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form method="POST" novalidate>
            {% csrf_token %}
            <p>{{ form.user }}{{ form.user.errors.0 }}</p>
            <p>{{ form.email }}{{ form.email.errors.0 }}</p>
            <p>{{ form.ug }}{{ form.ug.errors.0 }}</p>
            <p>{{ form.m2m }}{{ form.m2m.errors.0 }}</p>
            <input type="submit"  value="提交" />
        </form>
    </body>
    </html>
    edit.html

    沛齐

      

  • 相关阅读:
    豆瓣api-简单跨域演示
    MVC4 验证用户登录一个特性搞定
    IIS7.5 不能加载外部引用的第三方JS,CSS,img等一系列静态文件
    三合一网站后台密码重置
    anaconda安装 (开源的Python发行版本)
    通达信指标函数说明大全
    织梦CMS如何修改中英文模板的当前位置
    微信小程序上架需要增值电信业务经营许可证ICP?
    PS抠图玻璃杯227
    PS用通道工具人物头发抠图246
  • 原文地址:https://www.cnblogs.com/golangav/p/7495476.html
Copyright © 2011-2022 走看看