从Django模板中,我将id作为参数及其url传递。
<a href="/add/?q={{mytable.id}}" >Next</a>
当我点击下一步时,它会转到页面&#39;添加&#39;带有id参数(localhost / add /?q = 5c23451)。我将此参数的值赋给变量。
q1=request.GET.get('q','')
然后,我尝试从数据库中获取所有id =&#39; id&#39;如下:
obj=mytable.objects.get(id='q1')
问题是当我尝试打印q1时,它总是空的。你能告诉我哪里出错了吗?
整个视图
def addview(request):
q1=request.GET.get('q','')
if request.method == 'POST':
form= myform(request.POST)
if form.is_valid():
obj=mytable.objects.get(id=q1)
obj.info = form.cleaned_data['info']
obj.url= form.cleaned_data['content']
obj.save()
return HttpResponseRedirect('/success/')
else:
form=myform()
variables=RequestContext(request, {
'form':form
})
return render_to_response('/add/add.html', variables,)
forms.py
class myform(forms.Form):
info=forms.CharField(max_length=100)
content=forms.URLField()
答案 0 :(得分:4)
您正在查询字符串"q1"
而不是变量q1
。
obj = mytable.objects.get(id=q1)
请注意,Python中的行不应以分号结尾。
修改强>
当您发布表单而不是初始GET时,会发生这种情况。这是因为提交表单时不会保留GET变量。
你真的需要回到基础上。通过GET参数传递ID不是在Django中执行操作的正确方法。你应该在URL本身传递它;这更容易由内置工具生成,并且在您提交时将保留该值。
首先,您的addview
网址需要接受参数:
url(r'^add/(?P<id>\d+)/$', views.addview, name='add'),
您的链接现在应使用{% url %}
模板标记:
<a href="{% url "add" id=mytable.id %}" >Next</a>
现在,您的视图需要接受该参数:
def addview(request, id):
obj = mytable.objects.get(id=id)
这将自行解决您的问题,但您应该进行另一项改进,即使用ModelForm而不是普通表单。更改表格如下:
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('info', 'url')
现在您的观点变为:
def addview(request, id):
obj = mytable.objects.get(id=id)
if request.method == 'POST':
form = MyForm(request.POST, instance=obj)
if form.is_valid():
form.save()
return redirect('success')
else:
form = MyForm(instance=obj)
return render(request, 'add/add.html', {'form': form})
答案 1 :(得分:0)
你正在尝试的事情是不正确的。 a href
正在使用GET
请求。如果您点击该链接,则不会发布任何数据。此时它也不会进入if request.method == 'POST'
条件。然后,如果您有POST
的表单。然后设置表单属性action='/add/?q={{mytable.id}}'
。然后它将有request.POST
和request.GET
(现在)。