2013-08-02 47 views
1

我在我的django项目中有一个管理器,并且正在执行如下的过滤器。
我开始Django的外壳和得到这个错误:在django管理器中实现过滤器时出现属性错误

>>> from django.http import HttpRequest 
>>> r=HttpRequest() 
>>> r.session=() 
>>> from movierating.models import * 
>>> RatingModel.statManager.RatingTimeLine(r) 
Traceback (most recent call last): 
File "<console>", line 1, in <module> 
File "/data/dashapp/movierating/managers.py", line 27, in RatingTimeLine 
(data,display,err)=self.getdatacache(request) 
File "/data/dashapp/movierating/managers.py", line 11, in getdatacache 
filterDict=request.session.get('RatingFilter',{}) 
AttributeError: 'tuple' object has no attribute 'get' 
>>> from django.http import HttpRequest 
>>> r=HttpRequest() 
>>> r.session() 
Traceback (most recent call last): 
File "<console>", line 1, in <module> 
AttributeError: 'HttpRequest' object has no attribute 'session'r code here 

文件manager.py看起来是这样的:

import json,datetime 
from django.db import models 
from django.db.models import * 
from pandas import * 
from urllib import urlencode 
import hashlib 
from django.core.cache import cache 
from web.extras import * 

class RatingManager(models.Manager): 
def getdatacache(self,request): 
    filterDict=request.session.get('RatingFilter',{}) 
    (fapply,display,err)=normalizeFilter(self.model,filterDict) 
    cache_id=urlencode(fapply.items()) 
    cache_id=hashlib.md5('RatingFilter'+cache_id).hexdigest() 
    data=None 
    if data==None: 
    res=self.model.objects.order_by('date').filter(**fapply).values('date').annotate(
     RatingCounts = Count('rating'), 
     RatingSum = Sum('rating'), 
    ) 

    data=DataFrame(list(res)) 
    data['AverageRating']=data['RatingSum']/data['RatingCounts'] 
    cache.set(cache_id,data) 
    return (data,display,err) 

def RatingTimeLine(self,request): 
    jsondata={} 
    jsondata['chartconfig']={} 
    jsondata['chartconfig']['title']="Average Movie Rating per Day" 
    jsondata['chartconfig']['names']=['AverageRating'] 
    (data,display,err)=self.getdatacache(request) 
    jsondata['chartconfig']['errors']="<br/>".join(err) 
    jsondata['chartconfig']['subtitle']="<br/>".join(display) 
    jsondata['series']=data[['data','AverageRating']].values.tolist() 
    data=json.dumps(jsondata,cls = SeriesEncoder) 
    return {'data':data} 

我在这个模型我models.py

class RatingModel(models.Model): 
    movie=models.ForeignKey(MovieModel) 
    user=models.ForeignKey(userModel) 
    rating=models.IntegerField() 
    date=models.DateField() 
    objects=models.Manager() #default manager 
    statManager=RatingManager() #new manager class 
    # FilterMapping={ 
    #'movie':'movie__name', #django relational 
    # } 
def __unicode__(self): 
    return "id: %d rating for movie is %s" %(self.id,self.movie.name) #relationships 
class Meta: 
    app_label = 'movierating' 
    db_table = 'rating' 

有什么事情是这条线的可能错误?

filterDict=request.session.get('RatingFilter',{}) 

回答

-1

在你的第三个行,你说r.session=() - 也就是说,你要指定一个空的元组r.session。您的代码稍后尝试在此元组上调用get(),这不是受支持的操作。

我不确定你要在这里做什么。 request.session通常由会话中间件填充。如果您试图以编程方式测试您的代码,则可能需要查看Django测试框架,该框架为supports sessions