[英]newbie Django Choicefield/Charfield display on html page
我一直在閱讀django書籍和django文檔,但仍然可以弄清楚。
我有這個model.py
:
from django.db import models
from django.forms import ModelForm
class Zonas(models.Model):
name = models.CharField(max_length=30)
def __unicode__(self):
return self.name
class ZonasForm(ModelForm):
class Meta:
model = Zonas
這個view.py
:
from django import forms
from testApp.models import Zonas
from django.shortcuts import render_to_response
def menuForm (request):
z = list (Zonas.objects.all())
numbers = forms.CharField(max_length=30,
widget=forms.Select(choices=z))
return render_to_response('hello.html', {'numbers':numbers})
這個html
:
<html>
<body>
<form action="" method="get">
<div class="field">
{{ form.numbers }}
</div>
<input type="submit" value="Submit">
</form>
</body>
</html>
回答這個urls.py
:
from django.conf.urls import patterns, include, url
from testApp.views import menuForm
urlpatterns = patterns('',
url(r'^hello/$', menuForm ),
)
當我運行服務器時,我得到的只是一個帶有“提交”按鈕的頁面,並且沒有form.number被認為是選擇菜單。 我嘗試了這個views.py
:
def menuForm (request):
z = list (Zonas.objects.all())
numbers = forms.ChoiceField(choices=z)
return render_to_response('hello.html', {'numbers':numbers})
但是結果是一樣的...
有什么提示嗎? 我應該使用不同的退貨嗎?
當您從未將form
變量傳遞給模板時,您正在嘗試訪問{{ form.numbers }}
。 您將需要直接使用{{ numbers }}
訪問numbers
。
另外,您不太正確地使用表單。 檢查一下https://docs.djangoproject.com/en/dev/topics/forms/
創建一個包含ModelChoiceField的菜單表單
class MenuForm(Form):
zonas = forms.ModelChoiceField(queryset=Zonas.objects.all())
from myapp.forms import MenuForm
def menuForm(request):
if request.method == 'POST': # If the form has been submitted...
form = MenuForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
# Process the data in form.cleaned_data
# ...
return HttpResponseRedirect('/success/') # Redirect after POST
else:
form = MenuForm() # An unbound form
return render(request, 'hello.html', {
'form': form,
})
現在您可以在模板中使用表格
<html>
<body>
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
</form>
</body>
</html>
使用ModelChoiceField
怎么樣? 該代碼對我有用。
views.py:
from django import forms
from models import Zonas
from django.shortcuts import render_to_response
class NumbersForm(forms.Form):
numbers = forms.ModelChoiceField(queryset=Zonas.objects.all())
def menuForm(request):
form = NumbersForm()
return render_to_response('hello.html', {'form': form})
hello.html的:
<form action="" method="get">
<div class="field">
{{ form.as_p }}
</div>
<input type="submit" value="Submit">
</form>
</body>
</html>
您的應用程序中有幾個錯誤。 讓我們執行以下操作:
您將在testApp
文件夾中需要以下文件: models.py
, views.py
, forms.py
。 現在,在models.py
您將定義模型Zonas
(大致完成)
#models.py
from django.db import models
class Zonas(models.Model):
name = models.CharField(max_length=30)
def __unicode__(self):
return self.name
現在,在forms.py
文件中,您將具有以下內容:
from testApp.models import Zonas
from django.forms import ModelForm
z = ((zona.name,zona.name) for zona in Zonas.objects.all())
class ZonasForm(ModelForm):
name = forms.CharField(max_length=30,widget=forms.Select(choices=z))
class Meta:
model = Zonas
然后,您的views.py
:
from testApp.forms import ZonasForm
from django.shortcuts import render_to_response
def menuForm (request):
if request.method = 'POST':
form = ZonasForm(request.POST)
if form.is_valid():
form.save()
else:
form = ZonasForm()
return render_to_response('hello.html', {'form':form})
在那里,您的表格已處理完畢。
接下來,您的hello.html
:
<form action="" method="post">
{% csrf_token %}
<div class="field">
{{ form.as_p }}
</div>
<input type="submit" value="Submit">
</form>
</body>
所有這些結合在一起應該起作用。 您的應用定義中存在一些概念錯誤,希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.