作为一个新手,我正在努力找出属于哪里的东西。我有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']
行时,我认为答案变为否?
答案 0 :(得分:1)
你做的方式完全没问题。我发现通过在视图中明确提供模板所需的信息来将模板与模型分离是有用的,这实质上就是你所做的。没有从名为get_queryset
的方法返回实际查询集有点奇怪,但我也得出了基于类this这样的批评的结论,即基于类的视图,因为它们当前已实现在Django中应该被视为达到目的的手段,而不是用于组织视图代码的教条方式。抽象只是不像Django ORM那样干净。
如果你真的想要一点点滑动,你可以尝试使用values
方法来缩小查询集,并在注册计数中添加一个注释。但可能没什么意义。
答案 1 :(得分:0)
这取决于您尝试对阵列用户做什么'。编辑模板的人只能以某种方式设置和显示数据。 get_queryset函数可以提供模板的数据。