【问题标题】:MultipleChoiceField django python, impossible display datas in the templateMultipleChoiceField django python,模板中不可能显示数据
【发布时间】:2018-08-31 01:13:39
【问题描述】:

我有大问题,我在 django 中使用 MultipleChoic Field 进行“输入多选”, 用户可以通过“输入选择多个”做出许多选择

我给你解释一下:

我使用这个包:https://pypi.org/project/django-multiselectfield/

这是我的模型:

class Profil(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,) 
skill = MultiSelectField(max_length=500, null=True, blank=True, choices=Skillz)
board = MultiSelectField(max_length=500, null=True, blank=True, choices=Boardz)

这是我的表格:

class ProfilForm(forms.ModelForm):
skill = forms.MultipleChoiceField(required=False, widget=forms.SelectMultiple, choices=Skillz)
board = forms.MultipleChoiceField(required=False, widget=forms.SelectMultiple, choices=Boardz)

这是我的选择数据(用于模型 Profil 和表格 ProfilForm):

Boardz = (
('Reddit', 'reddit.com'),
('Discord', 'discord.com'),
('Twitter', 'twitter.com'),
)

Skillz = (
('Python', 'PythonDjango'),
('Rust', 'RustRocket'),
('Ruby', 'RubyOnRails'),
)

现在关注的问题是views.py和我的template.html

<!-- this is what I want with my datas -->
<select multiple class="form-control" id="id_board">
     <option>reddit.com</option> 
     <option>discord.com</option>
     <option>twitter.com</option>
 </select>

<select multiple class="form-control" id="id_skillz">
     <option>PythonDjango</option>
     <option>RustRocket</option>
     <option>RubyOnRails</option>
 </select>
 
 <input type="submit" value="Save">

进入views.py(这肯定是错误的):

def GetDatasForRegisterForm(request):
form = ProfilForm()
return render_response(request, "registration/register.html",{'form': form})

模板.html: 我完全迷失在为用户选择多个选项中显示我的数据选择,请问各位,如何制作?

【问题讨论】:

    标签: python django django-forms django-templates django-views


    【解决方案1】:

    更新:很好,我有我想要的,这里是给你的堆栈溢出成员,我的解决方案:

    class ProfilForm(forms.ModelForm):
     skill = forms.MultipleChoiceField(widget=forms.SelectMultiple, choices=Skillz) # skillz and boardz into choices.py 
     board = forms.MultipleChoiceField(widget=forms.SelectMultiple, choices=Boardz)
    
     class Meta:
        model = Profil
        fields = ('skill', 'board',)
    

    在views.py中> form = ProfilForm(),返回render..

    {% for value,text in form.board.field.choices %}
     <option value="{{ value }}">{{ text }}</option>
     {% endfor %}
    

    【讨论】:

      【解决方案2】:

      这就是我在处理表单时生成模板和views.py 的方式。

      首先在这里你定义了你的表单ProfilForm 一种快速的方法来了解当你的视图看起来像时在你的表单中生成的 html

      def GetDatasForRegisterForm(request):
          form = ProfilForm()
          return render_response(request, "registration/register.html",{'form': form})
      

      在您的模板中,您可以这样做

      <form method="POST" action="<your_action>">
      {{ csrf_token }}
      {{ form.as_p }}
      
       <input type="submit" value="Save">
      </form>
      

      现在,当您渲染此 django 时,它将根据指定的模型为您创建一个基本的 HTML。您可以复制 HTML 并自定义样式并通过访问表单字段值来填充值。

      现在您还没有询问如何保存此表单。但无论如何,让我这样做。

      我们将在同一个控制器中处理表单发布。

      def GetDatasForRegisterForm(request):
          form = ProfilForm(request.POST or None)
          if request.method == "POST" and form.is_valid():
               form.save()
               return redirect("/<sucess_page>")
          return render_response(request, "registration/register.html",{'form': form})
      

      在此处的视图中,我正在使用 POST 数据加载表单(如果存在)并检查表单在 POST 中是否有效并将其保存。如果页面成功或错误,您可以将页面引导至何处。

      【讨论】:

      • 您好,感谢您的回复,{{ form.as_p }} 不起作用,而且我想要的不是 p 标签,而是像上面的示例一样的多选。为了保存数据,重要的是要知道同时我将数据保存在用户模型中(用户名、电子邮件......)。而我在从用户扩展的配置文件中的“多项选择”。我首先希望成功恢复我的数据“选择”,以便用户可以选择内容
      • form.as_p 应该为您的表单字段呈现 html。这应该有助于获取 html 标签。这只是为了了解结构。
      • 是的,唉,它不起作用,我没有显示,我承认我觉得这很奇怪,我在这种类型的表格上挣扎了 20 个小时。我在views.py中有一个函数,在函数中有一个调用ProfilForm表单的代码,然后我把它发送到page.html,我用的是大名鼎鼎的{{form.as_p}},但这不起作用^^请看pastebin.com/a9s2mnaY
      • 好吧,经过长时间的战斗,我设法用我的数据“选择多个”显示我的表单,不幸的是,当你用 {{form.as_p}} 获取表单时,它真的很难看,我无法风格化带引导程序。 . pastebin.com/4yXegFgh^^
      猜你喜欢
      • 2021-12-24
      • 2013-02-17
      • 1970-01-01
      • 2012-03-18
      • 2016-10-15
      • 2012-04-17
      • 2014-11-12
      • 2016-12-24
      • 2017-02-16
      相关资源
      最近更新 更多