2014-09-30 58 views
1

我试图在模板中显示模型数据。 当我没有任何过滤,它工作正常!Django:使用基于类的通用视图访问模板中的模型数据

class UserLogList(ListView): 
    context_object_name = 'data' 
    queryset = UserLog.objects.all().values('user_id__username','event_id','time') 

但是,如果我想有一些过滤,例如,如果我想基础上,USER_ID其中USER_ID = 1。我可以从request对象或self.request对象获得用户ID来获得详细信息。

因此,要实现这一点,我做了下面的我views.py

class DisplayUserActivity(ListView): 
    template_name = 'user_activity.html' 
    uid = self.request.user.id 

    def get_object(self): 
     uid = self.request.user.id 
     object = super(DisplayUserActivity,self).get_object() 
     object.data = UserLog.objects.filter(user_id = uid).values('user_id__username','event_id','time') 
     return object 

和我template文件:

{% block content %} 
     <h2> Logs </h2> 
       <table border="1" style="width:50%"> 
         <tr> 
           <th> User Name </th> 
           <th> Description </th> 
           <th> Time </th> 
         </tr> 
           {% for user in data %} 
         <tr> 
             <td> {{user.user_id__username}}</td> 
             <td> {{user.event_id}}</td> 
             <td> {{user.time}} </td> 
           {% endfor %} 
         </tr> 
       </table> 
{% endblock %} 

我缺少什么?

回答

0

我认为在扩展通用ListView时,您需要一种名为get_queryset而不是get_object的方法。

编辑:

关于你的编辑,那里有一个问题,你的模板

{% for user in data %} 

应该

{% for user in object_list %} 

但我怀疑这里有更深层次的问题,这是很难破译。我的建议是更仔细地查看代码和Django文档,并可能切换到自定义书面视图,直到您更舒适。 :)

+0

我试过了,没有打通! '高清get_queryset(个体经营): 的uid = INT(self.request.user.id) context_object_name =“返回UserLog.objects.all()' – theblackpearl 2014-09-30 22:32:09

+0

@RohitPujar您的代码格式化搞砸了,我看不懂它。但是我刚刚在你的原始答案'uid'上注意到的一个问题不在范围内,你需要在get_queryset方法中使用'self.request.uid',就像@alecxe指出的那样 – michaelb 2014-09-30 22:34:27

+0

对不起,错过了这个问题。虽然这不是问题! – theblackpearl 2014-09-30 22:56:06

相关问题