Несколько вопросов о переключателях в формах Django - PullRequest
2 голосов
/ 27 апреля 2011

Это то, что у меня есть на данный момент:

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})

template

<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. Как избавиться от текста «Это поле обязательно для заполнения».

Я внимательно изучил документацию по djangoprojects, но, кажется, ничего там нет, если я что-то пропустил?

Ответы [ 2 ]

3 голосов
/ 27 апреля 2011

Один из вариантов удаления маркеров и «это поле обязательно для заполнения» - установить несколько стилей CSS.

Без маркеров:

list-style-type: none;

удалить поле, обязательное для заполнения:

display: none;

К сожалению, я не могу вспомнить, какие классы по умолчанию вам понадобятся.Это не должно быть трудно найти, хотя.

Для значения по умолчанию добавьте в поле выбора формы initial={'non-paying': 'Non-Paying'} после choices=usersegment, и это должно исправить это;)

PS.Дайте мне знать, если я не достаточно ясен.

edit нашел этот похожий вопрос для значений по умолчанию Установка выбранного значения в формах Django.

Редактировать 2: - как Глен указал в комментариях, вам также придется удалить поле.Я бы предложил нацелиться на элементы <li> и применить

margin: 0;
2 голосов
/ 27 апреля 2011

«Это поле обязательно для заполнения» отображается, потому что вы передаете параметр 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 передается в SegmentForm только на GET,и data передается только по POST.

Чтобы избавиться от пунктов маркера, вы просто используете CSS, но опять же вы не показали нам, как вы это делаете, поэтому невозможно сказать, почему этоне работает.

...