0

ユーザーがリストから (データベースから) 1 つの「もの」を選択できるようにしてから、そのレコードを使用してデータベース内の他のものを見つけようとしています。しかし、選択ページから選択情報を取得できません。

これを関連するコードのかなり完全なスナップショットにしようとしますが、削除しすぎたり、残しすぎたりする可能性があります。申し訳ありません。

私のmodels.py:

urlpatterns = patterns('',
url(r'^$', 'dblook.views.index', name='home'),
url(r'^dblook3/', 'dblook.views.try3', name='home2'),
url(r'^dblook4/', 'dblook.views.try4', name='home3'),
)

私のdblook/models.py:

from django.db import models
class serial_number(models.Model):
    def __unicode__(self):
        return self.serialno
        #return self.question
    class Meta:
        managed=False
        db_table='serial_number'
    sn_id = models.AutoField(primary_key=True)
    serialno = models.CharField(max_length=128)
    comment = models.ForeignKey(comment,null=True,db_column='comment')

my views.py (データベース モデルのインポート以外のすべてのインポートをスキップします。誰かが本当にそれらを必要とする場合は、更新します)

from dblook.models import *
class SerialnoSelectForm(forms.Form):
    serialno = forms.CharField(max_length=16)
    selected = forms.BooleanField()

class serialform(ModelForm):
    class Meta:
        model = serial_number
        exclude=('comment','sn_id')
    selected = forms.BooleanField()

class snselect(forms.Form):
    sno = forms.ChoiceField()

def try3(request):
    if ( request.POST ):
        output = "HEllo world, thanks for posting"
        return HttpResponse(output)
    else:
        sslst = snselect(serial_number.objects.filter(serialno__startswith="A128").order_by('-serialno'))
        t = loader.get_template('select_serialno.html')
        c = Context({
            'sslst': sslst,
            })
        c.update(csrf(request))
        return HttpResponse(t.render(c))

def try4(request,dsn):
    if ( request.POST ):
        output = "HEllo world, thanks for posting to 4"
        return HttpResponse(output)
    else:
        return HttpResponse("Error")

そして、私のテンプレート (select_serialno.html) は次のとおりです。

<h1>Select a serial number</h1>
 <ul>
   <form method='post' action'='/dbtest4/{{serial_number.sn_id}}/showme'>
     {% csrf_token %}
     {% for sn in sslst %}
     <input type="submit" name="sn.serialno" id="choice{{ forloop.counter }}" value="{{choice.id}}"/>
     <label for="choice{{ forloop.counter }}">{{ sn.serialno }}</label><br/>
     {% endfor %}
     <input type="submit" value="data" />
</form>

dblook3 に移動すると、シリアル番号のデータベースから素敵なリストが取得され、ボタンを押すとすぐに dblook4 の URL に移動します (この場合、常に '/dbtest4//showme/' の代わりに「/dbtest4/3/showme/」のようなもの)。残念ながら、彼らがどのボタンを押したかを知る方法はないようです。

の「もの」に何を入れても、<form method='post' action'='/dbtest/{{stuff}}/showme'>常に空です。

veiws.py の try4なども試しif( 'choice' in request.POST ):ましたが、うまくいきませんでした。

では、「look3」から「look4」までに選択されたものに関する情報を取得するにはどうすればよいですか? 私は何でもします...しかし、なぜ私がそうしているのかを説明できれば、あなたの答えが私の問題を解決するだけでなく、他の人が理解するのに役立つことを願っています...

(上記がかなり「進化的」に見える場合、それは私がこれを3日間ハッキングしているためです...)

ありがとう!

4

1 に答える 1

0

dblook フォームへPOSTの情報が必要です。look4

<form method='post' action'='{% url dblook.views.try4 %}'>

現時点/dbtest/{{serial_number.sn_id}}/showmeでは、意味をなさないものがあります。コンテキストに変数がないserial_numberため、それがどこから来たのかわかりません。ビューから選択されたものに応じて、ビューにdef try4(request,dsn):情報をロードしようとしていることを示唆するビュー定義があります(ただし、何をしようとしているのかを説明していないので、これを推測しています)。その場合は、url パラメータの代わりに POST 経由で渡されたデータに基づいてそれを行う必要があります。次のような非常に漠然としたもの:try4try3

def try4(request):
    if request.method == "POST":
        form = snselect(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            # Get the selected item from your choice field and retrieve the 
            # corresonding model object with that id
            ...
于 2012-11-07T22:28:13.777 に答える