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

    沛齐

      

  • 相关阅读:
    java集合
    struts2的OGNL表达式
    struts2 result type
    struts2在Action中访问WEB资源
    03异或^
    02自加自减运算机制
    原码,补码,反码
    Java基础50题test10—自由落体
    Java基础50题test9—求完数
    Java基础50题test8—输入数字求和
  • 原文地址:https://www.cnblogs.com/golangav/p/7495476.html
Copyright © 2011-2022 走看看