【问题标题】:Some questions about radio buttons in Django forms关于 Django 表单中单选按钮的一些问题
【发布时间】:2011-04-27 06:54:59
【问题描述】:

这是我目前拥有的:

views.py

def activation_signupcount(request):

    if 'datestart' not in request.GET:

        form = SegmentForm(request.GET)
        #form2 = Period(request.GET)

        return render_to_response('activation/activation_signupcount.html', {'datestart':'', 'form':form})

模板

<form method="get" action="">
<h3>1. Choose segment</h3>

{{ form.as_p }}

forms.py

from django import forms
from django.forms.widgets import RadioSelect
from django.forms.extras.widgets import SelectDateWidget

usersegment = [['non-paying','Non-paying'],['paying','Paying'], ['all', 'All']]

class SegmentForm(forms.Form):
    radio = forms.ChoiceField(required = True, label= False, widget=RadioSelect(), choices=usersegment)

输出如下所示

问题:

  1. 如何设置初始值或默认值?
  2. 如何删除项目符号
  3. 如何去掉“此字段为必填项”文本。

我仔细查看了 djangoprojects 上的文档,但似乎没有任何内容,除非我错过了什么?

【问题讨论】:

  • 您需要发布您的模板代码。你只是在做{{form}} 吗?

标签: django django-forms radio-button


【解决方案1】:

删除项目符号点和“此字段为必填项”的一个选项是设置一些 css 样式。

没有要点:

list-style-type: none;

删除字段必填文本:

display: none;

不幸的是,我不记得默认情况下您需要哪些课程。不过这应该不难找到。

对于默认值,在choices=usersegment 之后添加到您的表单选择字段initial={'non-paying': 'Non-Paying'},这应该可以解决这个问题;)

PS。如果我不够清楚,请告诉我。

编辑 为默认值Setting the selected value on a Django forms.ChoiceField找到了类似的问题@

编辑 2:- 正如 Glen 在 cmets 中指出的那样,您还必须删除边距。我建议定位 &lt;li&gt; 元素并应用

margin: 0;

【讨论】:

  • 项目符号点和默认值不起作用。我尝试了初始值的不同组合,但似乎不起作用。顺便说一句,该类是错误列表
  • @nai 要点必须属于不同的类别。默认值不起作用?对我来说已经有一段时间了...对于多项选择字段,它可能需要类似于 =[0]='non-paying'
  • @nai 我应该提到list-style-type: none 应该应用于&lt;ul&gt;
  • 从那以后我就明白了。谢谢!
  • 但是,list-style-type:none 仍然在列表左侧留下填充,要删除“空格”,请在 ul 标记中设置负边距,如下所示:&lt;ul style="margin-left:-30px;"&gt;...&lt;/ul&gt;
【解决方案2】:

“此字段是必需的”正在显示,因为您在实例化表单时传入了data 参数 - 您应该只在 POST 上执行此操作,而不是在 GET 上执行此操作。如果您显示您的视图代码,我可以进一步建议如何设置初始值。

更新好吧,很明显这确实是你的问题。出于某种原因,您将 request.GET 作为第一个位置参数传递,即data,从而绑定表单。 不要那样做。这就是为什么您会得到不需要的“此字段是必需的”。 datestart 到底应该是什么?

传递初始数据的方式有据可查。

def activation_signupcount(request):
    if request.POST:
        form = SegmentForm(request.POST)
        if form.is_valid():
            form.save()
        return HttpResponseRedirect('/somewhere/')
    else:
        form = SegmentForm(initial=request.GET)

    return render_to_response('activation/activation_signupcount.html',
                              {'datestart': request.GET.get('datestart', '')
                               'form': form})

这里initial 参数仅在 GET 上传递给 SegmentForm,data 仅在 POST 上传递。

为了摆脱要点,您只需使用 CSS,但您还没有向我们展示您是如何做到这一点的,因此无法说明为什么它不起作用。

【讨论】:

  • 更新了我的问题以包含视图 sn-p
  • 所以设置display:none; 以摆脱“此字段为必填项”真的有点不靠谱,不是吗?
  • 不仅是一种 hack,而且会阻止您的用户在他们出现时看到真正的错误消息。
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 2011-02-28
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 2016-08-12
相关资源
最近更新 更多