簡體   English   中英

html頁面上的新手Django Choicefield / Charfield顯示

[英]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的菜單表單

forms.py

class MenuForm(Form):
    zonas = forms.ModelChoiceField(queryset=Zonas.objects.all())

現在在您的視圖中使用該表格

views.py

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

現在您可以在模板中使用表格

hello.html的

<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.pyviews.pyforms.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM