我试图让用户从列表(从数据库)中选择一个“事物”,然后使用该记录在数据库中查找其他内容。但我无法从选择页面获取选择信息。
我会尽量让这成为相关代码的一个非常完整的快照,但我可能会删除太多或留下太多,抱歉。
我的模型.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')
我的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'>
,它总是空的。
我也尝试过if( 'choice' in request.POST ):
veiws.py 中的 try4 之类的方法,但这也不起作用。
那么,我如何获得有关从“look3”到“look4”中选择的内容的任何信息?我会接受任何事情...但是,如果您能解释我为什么这样做,希望您的回答不仅可以解决我的问题,还可以帮助其他人理解...
(如果上面看起来很“进化”,那是因为我已经破解了 3 天了......)
谢谢!