1

私の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',{})
4

1 に答える 1

-1

3 行目r.session=()では、つまり、空のタプルを に割り当てていますr.sessionget()コードは後でこのタプルを呼び出そうとしますが、これはサポートされていない操作です。

ここで何をしようとしているのかわかりません。request.session通常、セッション ミドルウェアによって入力されます。コードをプログラムでテストしようとしている場合は、セッションをサポートする Django テスト フレームワークを調べることをお勧めします。

于 2013-08-02T19:42:01.863 に答える