python - 'RadioSelect' object has no attribute 'renderer' -
i have made web site seeing django tutorial. https://docs.djangoproject.com/en/1.11/intro/
i got error,
attributeerror @ /polls/1/ 'radioselect' object has no attribute 'renderer'
it happens in line 21 of forms.py,which init. wrote in forms.py like
from django import forms class myform(forms.form): text = forms.charfield(max_length=100,required=false,label='テキスト') class voteform(forms.form): choice = forms.modelchoicefield( queryset=none, label='選択', widget=forms.radioselect, empty_label=none, error_messages={ 'required':"you didn't select choice.", 'invalid_choice':"invalid choice.", }, ) def __init__(self,question,*args,**kwargs): super().__init__(*args,**kwargs) self.fields['choice'].queryset = question.choice_set.all() self.fields['choice'].widget.renderer.inner_html = '{choice_value}{sub_widgets}<br>'
setting of radio button written in detail.html,like
<!doctype html> <h1>{{ question.question_text }}</h1> {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} <form action="{% url 'poll_vote' question.id %}" method="post"> <!--<form action="" method="post">--> {% csrf_token %} {% choice in question.choice_set.all %} <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" /> <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> {% endfor %} <!--{{ form }}--> <input type="submit" value="vote" /> </form> </html>
views.py is
from django.shortcuts import render django.utils.html import mark_safe .models import question django.http import httpresponse django.shortcuts import http404 django.shortcuts import get_object_or_404,redirect .models import choice django.views.generic import templateview django.views.generic import detailview django.views.generic import listview .forms import myform .forms import voteform # create views here. def index(request): return render(request,'polls/index.html',{ 'questions': question.objects.all(), }) def detail(request,pk): obj = get_object_or_404(question,pk=pk) if request.method == "post": form = voteform(question=obj,data=request.post) if form.is_valid(): return redirect('polls:results',pk) else: form = voteform(question=obj) return render(request,'templates/polls/detail.html',{ 'form':form, 'question': obj, }) def vote(request,pk): pass def results(request,pk): obj = get_object_or_404(question,pk=pk) return render(request,'polls/results.html',{ 'question':obj, }) def form_test(request): if request.method == "post": #request.post??? form = myform(data=request.post) if form.is_valid(): pass else: form = myform() return render(request,'polls/form.html',{ 'form':form, })
traceback like
traceback: file "/users/xxx/django/django/core/handlers/exception.py" in inner 35. response = get_response(request) file "/users/xxx/django/django/core/handlers/base.py" in _get_response 130. response = self.process_exception_by_middleware(e, request) file "/users/xxx/django/django/core/handlers/base.py" in _get_response 128. response = wrapped_callback(request, *callback_args, **callback_kwargs) file "/users/xxx/djangostudy/polls/views.py" in detail 40. form = voteform(question=obj) file "/users/xxxi/djangostudy/polls/forms.py" in init 21. self.fields['choice'].widget.renderer.inner_html = '{choice_value}{sub_widgets}<br>' exception type: attributeerror @ /polls/1/ exception value: 'radioselect' object has no attribute 'renderer'
i not know how fix it.i cannot understand why error happen. should fix this?
you see have here:
>>> django import forms >>> myapp.models import vote >>> >>> class voteform(forms.form): ... choice = forms.modelchoicefield( ... queryset=vote.objects.all(), ... widget=forms.radioselect() ... ) ... >>> >>> f = voteform() >>> >>> f.fields['choice'] <django.forms.models.modelchoicefield object @ 0xb64ec3ec> >>> >>> f.fields['choice'].widget.renderer traceback (most recent call last): file "<console>", line 1, in <module> attributeerror: 'radioselect' object has no attribute 'renderer' >>>
you getting traceback attributeerror: 'radioselect' object has no attribute 'renderer'
because renderer
isn't available:
>>> dir(f.fields['choice'].widget) ['__class__', '__deepcopy__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slotnames__', '__str__', '__subclasshook__', '__weakref__', '_format_value', '_render', 'add_id_index', 'allow_multiple_selected', 'attrs', 'build_attrs', 'checked_attribute', 'choices', 'create_option', 'format_value', 'get_context', 'id_for_label', 'input_type', 'is_hidden', 'is_localized', 'is_required', 'media', 'needs_multipart_form', 'optgroups', 'option_inherits_attrs', 'option_template_name', 'options', 'render', 'subwidgets', 'supports_microseconds', 'template_name', 'use_required_attribute', 'value_from_datadict', 'value_omitted_from_data'] >>>
but here found render
, _render
functions:
>>> f.fields['choice'].widget.render <bound method widget.render of <django.forms.widgets.radioselect object @ 0xb64ec4ac>> >>> >>> f.fields['choices'].widget._render <bound method widget._render of <django.forms.widgets.radioselect object @ 0xb64ec4ac>> >>>
i don't know why need function
.inner_html
, , expect do.
maybe documentation customizing form template useful you.
Comments
Post a Comment