0

作为一个新手,我正在努力弄清楚什么属于哪里。我有一个ListView列出系统中所有用户的方法,它包括一个get_queryset方法 - 类似于:

def get_queryset(self):
    users = []
    for user in User.objects.all(): 
        a_user = {}            
        a_user['username'] = user.username
        a_user['full_name'] = user.get_full_name()
        a_user['num_of_friends'] = len(user.friends.all())  
        a_user['phone_num'] = user.get_profile().phone_num

        a_user['has_subscription'] = bool(Subscription.objects.filter(subscriber=self.request.user))

        users.append(a_user)
    return users

因此,我不是返回用户的查询集,而是根据每个用户的各种选择属性制作这个字典,模板设计者得到的仅限于我认为他们应该拥有的。

将用户对象传递给模板并让模板编写者从他们那里得到他们需要的任何东西是更好的做法吗?我想答案是肯定的。

但是,当谈到a_user['has_subscription']上面的那一行时,我认为答案是否?

4

2 回答 2

1

你这样做的方式完全没问题。我发现通过在视图中显式提供模板所需的信息来将我的模板与模型分开是很有用的,这基本上就是您所做的。get_queryset从一个名为最后,与组织视图代码的教条方式相反。抽象根本不像 Django ORM 那样干净。

如果你真的想要一些更漂亮的东西,你可以尝试使用该values方法来缩小你的查询集,并在订阅计数中添加一个注释。但应该没什么太大意义。

于 2012-12-12T21:08:52.383 回答
0

这取决于您要对数组“用户”做什么。编辑模板的人只能以某种方式设置和显示数据的样式。get_queryset 函数可以为模板提供数据。

于 2012-12-12T20:42:28.313 回答