zoukankan      html  css  js  c++  java
  • form与modeform

    form

    模型表的增删改查

    form组件

    1.校验数据
    2.渲染标签
    3.展示信息

    modelform用法

    from django.forms import ModelForm
    from django.forms import widgets as wid
    class ModelFormClass(ModelForm):
        class Meta:
            model =Student #对应的Model中的类
            fields = "__all__" #字段,如果是__all__,就是表示列出所有的字段
            exclude = None #排除的字段
            #error_messages用法:
            error_messages = {
            'name':{'required':"用户名不能为空",},
            'age':{'required':"年龄不能为空",},
            }
            #widgets用法,比如把输入用户名的input框给为Textarea
            #首先得导入模块
            from django.forms import widgets as wid #因为重名,所以起个别名
            widgets = {
            "name":wid.Textarea(attrs={"class":"c1"}) #还可以自定义属性
            }
            #labels,自定义在前端显示的名字
            labels= {
            "name":"用户名"
            }
        return ModelFormClass
    

    方法一

    from django.forms import ModelForm
    class BookForm(ModelForm):
        class Meta:
            model = models.Book  # 指定你要操作的模型表
            fields = '__all__'  # __all__渲染出所有字段
            # fields = ['title']  # 可以指定展示的字段
    
        def clean_title(self):
            title = self.cleaned_data.get('title')
            if title == '666':
                self.add_error('title','光喊666是不行滴')
            else:
                return title
    
    def add_form(request):
        form_obj = BookForm()
        if request.method == 'POST':
            form_obj = BookForm(request.POST)
            if form_obj.is_valid():
                form_obj.save()
                return redirect('/list')
        return render(request,'add_form.html',locals())
    
    
    def edit_form(request,id):
        edit_obj = models.Book.objects.filter(pk=id).first()
        form_obj = BookForm(instance=edit_obj)
        if request.method == 'POST':
            form_obj = BookForm(request.POST,instance=edit_obj)
            if form_obj.is_valid():
                form_obj.save()
                return redirect('/list')
        return render(request,'edit_form.html',locals())
    

    方法二

    app中

    # 先在def __init__():中定义model_form_class  = None
    class BookConfig(ModelStark):
        list_display = ['title','price','publishDate','publish']
        list_display_links = ['title']
        from django.forms import ModelForm
        class BookModelForm(ModelForm):    #自己方法中配置了modeform方法
            class Meta:
                model = models.Book
                fields = '__all__'
                from django.forms import widgets as wid
                widgets = {
                    'title':wid.TextInput(attrs={'class':'form-control'}),
                    'price':wid.TextInput(attrs={'class':'form-control'}),
                    'publishDate':wid.DateInput(attrs={'class':'form-control'}),
                    'publish':wid.Select(attrs={'class':'form-control'}),
                    'authors':wid.SelectMultiple(attrs={'class':'form-control'}),
                }
        model_form_class = BookModelForm
    
    site.register(models.Book,BookConfig)
    

    admin中

    def get_model_form(self):
            if self.model_form_class:            #如果自己方法中配置了modeform方法旧使用自己的,没有配置使用默认的
                return self.model_form_class
            from django.forms import ModelForm
            from django.forms import widgets as wid
            class ModelFormClass(ModelForm):
                class Meta:
                    model = self.model
                    fields = "__all__"
    
            return ModelFormClass
    
        def add_view(self,request):
            model_form_class = self.get_model_form()
            model_form_obj = model_form_class()
            if request.method == 'POST':
                model_form_obj = self.model_form_class(request.POST)
                if model_form_obj.is_valid():
                    model_form_obj.save()
                    return redirect(self.get_reverse_url('list'))
            return render(request,'stark/add_view.html',locals())
    
        def edit_view(self,request,id):
            edit_obj = self.model.objects.filter(pk=id).first()
            model_form_class = self.get_model_form()
            model_form_obj = model_form_class(instance=edit_obj)     #instabce用于区别是增加还是编辑
            if request.method == 'POST':
                model_form_obj = model_form_class(request.POST,instance=edit_obj)
                if model_form_obj.is_valid():
                    model_form_obj.save()
                    return redirect(self.get_reverse_url('list'))
            return render(request,'stark/edit.html',locals())
    
  • 相关阅读:
    【Linux开发】Linux磁盘管理
    【Qt开发】QThread中的互斥、读写锁、信号量、条件变量
    【Qt开发】QThread中的互斥、读写锁、信号量、条件变量
    【Qt开发】设置中心窗口 setCentralWidget
    【Qt开发】设置中心窗口 setCentralWidget
    【Qt开发】QT样式表单 qss的样式优化
    【Qt开发】QT样式表单 qss的样式优化
    【Qt开发】foreach用法
    【Qt开发】foreach用法
    【Qt开发】设置Qt应用程序图标
  • 原文地址:https://www.cnblogs.com/huanghongzheng/p/11295391.html
Copyright © 2011-2022 走看看