0

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

でも結果は同じ…

ヒントはありますか?別のリターンを使用する必要がありますか?

4

3 に答える 3

2

テンプレート{{ form.numbers }}に変数を渡さないときにアクセスしようとしています。で直接formアクセスする必要があります。numbers{{ numbers }}

また、フォームを正しく使用していません。これをチェックしてください https://docs.djangoproject.com/en/dev/topics/forms/

ModelChoiceFieldを含むメニュー フォームを作成する

フォーム.py

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

ビューでそのフォームを使用する

ビュー.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>
于 2013-04-30T15:37:36.523 に答える
1

アプリケーションにいくつかのエラーがあります。次のようにしましょう。

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>

これらすべてを組み合わせて機能するはずです。アプリの定義にいくつかの概念エラーがありました。これがガイドとして役立つことを願っています。

于 2013-04-30T15:41:25.270 に答える
1

を使用してはModelChoiceFieldどうですか?このコードは私にとってはうまくいきます。

ビュー.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})

こんにちは.html:

<form action="" method="get">
    <div class="field">

        {{ form.as_p }}

    </div>
    <input type="submit" value="Submit">
</form>
</body>
</html>
于 2013-04-30T15:37:15.887 に答える