태그에서 값을 가져 와서 제출하여 '/ value /'로 리디렉션해야합니다.폼에서 값을 가져와 Django에서/value로 리디렉션하는 방법 1.10
지금은 받고 있어요 : 나는 완전히 뭔가를 누락
'ApartmentForm' object has no attribute 'cleaned_data'
.
views.py
def index(request):
context = {}
context['apartments'] = get_list_or_404(Apartment)
if request.method == 'POST':
form = ApartmentForm(request.POST or None)
context = {'form': form,}
id = form.cleaned_data.get('id', None)
return redirect(id)
else:
context['apartment_form'] = ApartmentForm
return render(request, 'main/main.html', context)
템플릿
<form action="/{{ apartment.id }}" method="post">
{% csrf_token %}
<p><select size="10">
<option disabled>Chose apartment</option>
{% for apartment in apartments %}
<option value="{{ apartment.id }}">{{ apartment.title }}</option>
{% endfor %}
</select></p>
<input type="submit" value="Chose">
</form>
업데이트
class ApartmentForm(ModelForm):
class Meta:
model = Apartment
fields = ['title']
forms.py
감사 다니엘! 템플릿에서 양식을 호출하지 않는 것이 좋습니다. 나는 그것을 고쳤지 만, 그것은 여전히 None
을 URL (http://127.0.0.1:8000/None)로 전달한다. 이유를 알아낼 수 없습니다.
view.py
def index(request):
context = {}
context['apartments'] = get_list_or_404(Apartment)
if request.method == 'POST':
form = ApartmentForm(request.POST or None)
if form.is_valid():
id = form.cleaned_data.get('id', None)
return redirect(id)
else:
context['apartment_form'] = ApartmentForm
return render(request, 'main/main.html', context)
forms.py
APARTMENTS =()
for apartment in Apartment.objects.all():
APARTMENTS += ((apartment.id, apartment.title),)
class ApartmentForm(Form):
apartment = ChoiceField(label='', widget=Select, choices=APARTMENTS)
템플릿이처럼 views.py
변경 sould 있도록
<form action="." method="post">
{% csrf_token %}
{{ apartment_form }}
<input type="submit" value="Chose">
cleaned_data에 액세스하려면 먼저'form.is_valid()'를 확인해야합니다. –
양식 동작 값도 의미가 없습니다. 그 시점에서 apartment.id에 대한 가치가 없습니다. 다행히도, 그것은 단지 액션을 비게하므로, 어쨌든 당신이 원하는 인덱스 뷰에 제출합니다. –
@DanielRoseman 덕분에'action = "."로 변경하고'form.is_valid()'를 추가했으나 ValueError가 반환 한 결과가 없음을 알게되었습니다 ... Traceback은 Lee의 답변 아래에 있습니다. –