<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      django 表單

      實(shí)現(xiàn)方式一:將具體的search操作放到views

      首先,在app下面新建一個(gè)forms.py文件,用于定義表單。創(chuàng)建了一個(gè)名為"SearchCaseForm"的表單,并定義了一個(gè)名為“case_name”的CharField

      from django import forms
      
      class SearchCaseForm(forms.Form):
      	case_name = forms.CharField()
      

      創(chuàng)建一個(gè)搜索視圖,它將處理從搜索表單的查詢字符串并返回匹配的對(duì)象。在應(yīng)用程序中創(chuàng)建一個(gè)名為“views.py”的新文件,并將以下代碼添加到文件中

      from django.shortcuts import render
      from .models import Post
      from .forms import SearchForm
      
      def search(request):
      	form = SearchForm(request.GET or None)
      
      	results = []
      	if request.method == 'GET' and form.is_valid():
      		case_name = form.cleaned_data['case_name']
      		results = Post.objects.filter(title__icontns=case_name)
      
      	return render(request, 'search.html', {'form': form, ‘results’: results})
      

      創(chuàng)建搜索模版,需要?jiǎng)?chuàng)建一個(gè)名為“search.html”的模板,它將呈現(xiàn)搜索表單和搜索結(jié)果

      {% csrf_token %}
      
      {{ form.as_p }}
      Search
      {% if results %}
      Results
      {% for result in results %}
      {{ result.title }}
      {% endfor %}
      
      {% endif %}
      
      

      實(shí)現(xiàn)方式二:將具體的search操作放到forms中

      forms.py

      class SearchCaseForm(forms.Form):
          cluster_type = forms.ModelChoiceField(queryset=models.ClusterType.objects.all(),
                                           widget=forms.Select(attrs={'class': 'custom-select mb-3'}), required=False)
          cluster_version = forms.ModelChoiceField(queryset=models.Version.objects.all(),
                                                   widget=forms.Select(attrs={'class': 'custom-select mb-3'}), required=False)
          cluster_repo = forms.ModelChoiceField(queryset=models.Repo.objects.all(),
                                           widget=forms.Select(attrs={'class': 'custom-select mb-3'}), required=False)
      
          def search(self):
              cluster_type = self.cleaned_data["cluster_type"]
              cluster_repo = self.cleaned_data["cluster_repo"]
              cluster_version = self.cleaned_data["cluster_version"]
              logger.info(self.cleaned_data["cluster_version"])
              all_scenio = models.ScenioCase.objects.all()
              # xxx
              return all_scenio
      

      views.py

          def get(self, request):
              form_search_case = forms.SearchCaseForm(request.GET)
              all_scenio = form_search_case.search() if form_search_case.is_valid() else models.ScenioCase.objects.all()
      		return render(request, 'search.html', {'form': form_search_case, 'results': all_scenio})
      

      其他小細(xì)節(jié)

      1)如何取消表單required
      使用required=false

      cluster_repo = forms.ModelChoiceField(queryset=models.Repo.objects.all(),
                                           widget=forms.Select(attrs={'class': 'custom-select mb-3'}), required=False)
      
      

      2)下拉框元素
      可以直接使用表中數(shù)據(jù),也可以自定義元素的可選值
      https://cloud.tencent.com/developer/information/如何在django中為表單創(chuàng)建下拉框?-album

      from django import forms
      
      class MyForm(forms.Form):
          my_choices = (
              ('option1', 'Option 1'),
              ('option2', 'Option 2'),
              ('option3', 'Option 3'),
          )
          my_field = forms.ChoiceField(choices=my_choices)
      
      
      from django import forms
      from .models import MyModel
      
      class MyForm(forms.Form):
          my_field = forms.ModelChoiceField(queryset=MyModel.objects.all())
      

      3)如何對(duì)is_valid做自定義校驗(yàn)
      https://c.biancheng.net/view/7973.html
      表單系統(tǒng)會(huì)自動(dòng)查找以 clean_ 開頭,以字段名結(jié)尾的方法,它會(huì)在驗(yàn)證字段合法性的過程中被調(diào)用,因此,如果想要自定義校驗(yàn)邏輯,可以按如下方式編寫代碼:

      class RegForm(forms.Form):
          name = forms.CharField(label='用戶名')
      
          def clean_name(self):
              name=self.cleaned_data['name']
              if len(name)<6:
                  raise forms.ValidationError("你注冊(cè)的用戶名字符太短了")
              return name
      

      4) 模版:為了豐富表單的格式,可以進(jìn)行以下幾種方式
      https://geek-docs.com/django/django-questions/587_django_django_what_is_the_best_way_to_format_forms.html
      比如在forms.py定義attrs,定義html的css格式

      cluster_repo = forms.ModelChoiceField(queryset=models.Repo.objects.all(),
                                           widget=forms.Select(attrs={'class': 'custom-select mb-3'}), required=False)
      

      在templates文件中定義各個(gè)表單元素的格式

      <div class="row">
                  <div class="col-md-12">
                      <div class="card">
                          <div class="card-body">
                              <form method="get">
                              {% csrf_token %}
      
                              <div class="form-row" style="width: 800px">
                                  <div class="col">
                                      {{ form.cluster_type.label_tag }}{{ form.cluster_type }}
                                  </div>
                                  <div class="col">
                                      {{ form.cluster_repo.label_tag }}{{ form.cluster_repo }}
                                  </div>
                                  <div class="col">
                                      {{ form.cluster_version.label_tag }}{{ form.cluster_version }}
                                  </div>
                                  <div class="col">
                                      <button style="margin-top: 30px" type="submit" class="btn btn-success">Search</button>
                                  </div>
                              </div>
                              </form>
                          </div>
                      </div>
                  </div>
              </div>
      

      效果圖
      image
      5)表單文本框增加提示

      # forms.py
      be_module_config = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control',
                                                              'placeholder': '該case要變更的be配置'}), required=False)
      
      
      # html
      {{ form.be_module_config.label_tag }} {{ form.be_module_config }}
      

      效果如下:
      image

      6)multi字段

      cluster_type = forms.ModelMultipleChoiceField(queryset=models.ClusterType.objects.all(), widget=forms.SelectMultiple(attrs={'class': 'form-control'}))
      

      image
      來自參考:https://geek-docs.com/django/django-questions/452_django_django_modelmultiplechoicefield_set_initial_values.html

      posted on 2024-05-06 16:33  Y.Debby  閱讀(31)  評(píng)論(0)    收藏  舉報(bào)

      主站蜘蛛池模板: 新巴尔虎左旗| 久久99九九精品久久久久蜜桃| 亚洲综合无码一区二区| 黑人巨大无码中文字幕无码| 无码综合天天久久综合网| 国产精品天干天干综合网| 制服丝袜美腿一区二区| 久久夜色撩人精品国产av| 精品无人乱码一区二区三区的优势 | 日本成人午夜一区二区三区| 中文字幕在线亚洲精品| 影音先锋男人站| 一区二区免费高清观看国产丝瓜| 久久午夜私人影院| 成人网站国产在线视频内射视频| 亚洲成aⅴ人片久青草影院| 99久久亚洲综合精品成人网| 中文字幕无码视频手机免费看| 亚洲成年轻人电影网站WWW| 国产欧美性成人精品午夜| 精品国产免费人成网站| 久久99精品久久久大学生| 麻豆成人久久精品二区三| 日本人成精品视频在线| 男女激情一区二区三区| 超碰人人超碰人人| 无码人妻丝袜在线视频| 成人乱码一区二区三区四区| 色综合色综合久久综合频道| 成人亚欧欧美激情在线观看 | 国产成人精品无码播放| 少妇久久久被弄到高潮| 国产在线精品国偷产拍| 国产对白老熟女正在播放| 加勒比无码人妻东京热| 国产在视频线在精品视频2020| 强奷漂亮人妻系列老师| 亚洲国产成人精品区综合| 放荡的少妇2欧美版| 免费无码又爽又刺激高潮虎虎视频| 日本乱码在线看亚洲乱码|