在Django中将数据从模板传递到视图
从Django模板,我将id作为参数与其url一起传递在Django中将数据从模板传递到视图,django,Django,从Django模板,我将id作为参数与其url一起传递 <a href="/add/?q={{mytable.id}}" >Next</a> 然后,我尝试从数据库中获取所有对象,其中id='id',如下所示: obj=mytable.objects.get(id='q1') class MyForm(forms.ModelForm): class Meta: model = MyModel fields = ('info', '
<a href="/add/?q={{mytable.id}}" >Next</a>
然后,我尝试从数据库中获取所有对象,其中id='id',如下所示:
obj=mytable.objects.get(id='q1')
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('info', 'url')
问题是当我试图打印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()
您正在查询字符串
“q1”
,而不是变量q1
obj = mytable.objects.get(id=q1)
请注意,Python中的行不应以分号结尾
编辑
这是在您发布表单时发生的,而不是在最初的GET上。这是因为在提交表单时GET变量不会被保留
你真的需要回到这方面的基础。在Django中,通过GET参数传递ID不是正确的方法。您应该在URL本身中传递它;内置工具更容易生成,提交时将保留该值
首先,您的addview
URL需要接受以下参数:
url(r'^add/(?P<id>\d+)/$', views.addview, name='add'),
def addview(request, id):
obj = mytable.objects.get(id=id)
现在,视图需要接受该参数:
url(r'^add/(?P<id>\d+)/$', views.addview, name='add'),
def addview(request, id):
obj = mytable.objects.get(id=id)
这将自行解决您的问题,但您还应该进行另一项改进,即使用ModelForm而不是普通表单。更改表格如下:
obj=mytable.objects.get(id='q1')
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})
你正在尝试的东西是不正确的
a href
用于GET
请求。如果您单击该链接,它将不会发布任何数据。如果request.method=='post'它也不会进入条件。然后如果您有一个表单要post
。然后设置表单属性action='/add/?q={{mytable.id}'
。然后它将有request.post
和request.GET
(现在).您最好将django url结构与CBV一起使用,即,{%url'myapp:my_detail_view'pk=obj.pk%}
试试看,您能发布视图吗?您的方式没有错误。另外,“我试图从id='id'所在的数据库中获取所有对象”不正确,因为,get
必须包含唯一的文档。否则,请使用filter
尝试打印q1
的位置。还有,在我们看来什么是第一季度?@itzmeontv我编辑了这篇文章。现在它包含了我的观点。谢谢,但它不起作用。我已编辑我的问题以包含整个视图。你能查一下吗?但现在你似乎用的是uid
而不是id
。是哪一个?请注意,Python中的行也不会以逗号结尾。很抱歉,这是id(再次编辑文章)。它转到/add,但错误为“mytable matching query不存在”。错误显示在此行中:“obj=mytable.objects.get(id=q1)”。我认为q1没有得到q的值。非常感谢!这解决了大部分问题。现在它抛出了一个noreversematch错误。”对于参数为“()”且关键字参数为“{u'id”:u'5caed0'}”的“添加”则相反。尝试了1个模式:[“添加/(?P\\d+/$”]我不知道您为什么将其更改为
,它应该是
。但我不知道你用的是非数字ID。因此模式应该是r'^add/(?P\w+/$”