一些基本的django问题

时间:2014-06-08 04:46:48

标签: python django django-views django-sessions

我是django的新手,我需要一些关于这个代码的例子。

我有一个文本框和同一模板上的输出,这是以下视图:

def sessiontest(request):
    a=request.session.get('a',{})
    form=sform()
    return render_to_response('cart.html',{'form':form,'a':a},context_instance=RequestContext(request))

以及处理数据的视图是:

def sessiontest2(request):
 if request.method=="POST":
     form=sform(request.POST)
     if form.is_valid():
         request.session['a']=form.cleaned_data["name"]
         return HttpResponseRedirect(reverse(sessiontest))

如果我只需要存储一个值,它工作正常,但是如果每次有{value1,value2,new_value,new_value}这样的新输入时,如何允许我的request.session ['a']存储多个数据?我需要它采用的格式是我可以在模板中使用{% for i in a %}循环显示,并用于过滤我的模型。

这只是一个测试代码,稍后我将需要将product_id存储在其中并使用它以这种方式过滤我的项目:

items=models.products.objects.filter(pk=request.session["a"])

请给我一些关于如何做到这一点的提示。

3 个答案:

答案 0 :(得分:2)

如果您从视图中传递模板中的列表,则可以使用此{% for i in a %}。与查询items=models.products.objects.filter(pk=request.session["a"])一样,将提供可以迭代和显示属性的对象列表。 如果要存储多个项目,可以使用字典。 request.session['a']['value1'] = 'value1'

您可以使用

访问模板中的字典
{% for key, val in dict.items %}
    <td>{{ key }}</td>
    <td>{{ val }}</td>
{%  endfor  %}

或者你可以使用for循环计数器来区分值,同时像这样stroing

count=0 

for i in val: 
  count+=1   
  request.session[a+str(count)]=i

然后您可以像request.session["a1"]一样访问它,依此类推其他值 希望有所帮助

答案 1 :(得分:1)

最好的方法是创建另一个模型,该模型将存储该会话的会话ID,并且该模型与您的产品对象之间存在许多联系。

Models.py

类Storedsessionproducts(models.Model):         products = models.ManytoManyField(Products,null = True,related-name =“ storedproducts”)

现在在您的view.py中,将您的会话ID设置为该会话创建的Storedsessionproducts     #使用session_id检索当前的Storedsessionproducts对象     然后从中取出所有产品     session_id = request.session.get('cart_id')

## assuming you have successfully created Storedsessionproducts
# add all created products in Storedsessionproducts
request.session['cart_id']=Storedsessionproducts.id

答案 2 :(得分:0)

您希望将数据存储为值列表。一个简单的方法是:

request.session.setdefault('a', []).append(form.cleaned_data['name'])

如果会话中不存在键'a',则会将空列表设置为默认列表,然后将该名称附加到新列表或现有列表。您可以使用以下查询查询这些对象:

Products.objects.filter(id__in=request.session.get('a', []))