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

    沛齐

      

  • 相关阅读:
    [iOS]swift版内购
    [iOS]UIScrollView左右拨动,第二页宽度只有一半问题
    [iOS]UIScrollView嵌套内容在左右拨动的时候自动被顶上问题
    [Android]RecyclerView添加HeaderView出现宽度问题
    [iOS]swift之UITableView添加通过xib创建的headerView坑爹问题
    [iOS]隐藏导航栏把右滑退出操作保留
    [iOS]使用autolayout的时候会有明明设置和父视图左右间距为0但却还有空隙问题
    [iOS]改变状态栏颜色
    [iOS]UIScrollView嵌套UITableView,超出屏幕的cell点击不了问题
    sublime text 3快速生成html头部信息
  • 原文地址:https://www.cnblogs.com/golangav/p/7495476.html
Copyright © 2011-2022 走看看