关于Django形式的单选按钮的一些问题

时间:2011-04-27 06:55:00

标签: django django-forms radio-button

这就是我现在所拥有的:

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)

输出看起来像这样

enter image description here

问题:

  1. 如何设置初始值或默认值?
  2. 如何删除要点
  3. 如何删除文本'此字段是必填项。'
  4. 我很好地看了关于djangoprojects的文档,但除非我错过了什么,否则似乎没有任何内容?

2 个答案:

答案 0 :(得分:3)

删除项目符号的一个选项和“需要此字段”是设置一些CSS样式。

没有要点:

list-style-type: none;

删除字段所需的文字:

display: none;

不幸的是,我不记得我的头顶默认你需要哪些类。但这应该不难发现。

要将默认值添加到initial={'non-paying': 'Non-Paying'}之后的表单选择字段choices=usersegment,并且应该修复该字段;)

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

修改 针对默认设置Setting the selected value on a Django forms.ChoiceField

发现了类似的问题

编辑2: - ,因为Glen在评论中指出您还必须删除保证金。我建议定位<li>元素并应用

margin: 0;

答案 1 :(得分: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,但是你还没有向我们展示你是如何做到这一点所以不可能说出它为什么不起作用。