我正在尝试从Django 1.4.15-> 1.7.3移植应用程序
我遇到了一个问题,其中应用程序在models.py中有一种方法
def is_votable(self, user):
'''
Decides if the user can vote for him/herself or not
'''
if self.rated_by.all().__contains__(user):
return False
return True
我遇到的问题位于此行上:
if self.rated_by.all().__contains__(user):
会产生错误:
'QuerySet' object has no attribute '__contains__'
我可能是盲目的,因为我看不到__contains__
在Django中过时的地方。任何帮助深表感谢。还可以问您是否需要更多信息。
您几乎永远都不应像__contains__
在代码中那样调用双下划线方法。在几乎所有情况下,都可以使用in
运算符:
if user in self.rated_by.all():
请注意,这是Python范围内的事情:例如,不调用而mylist.__length__()
就做do len(mylist)
,而不是就做myobj.__unicode__()
do unicode(myobj)
,等等。
但是,在这种特殊情况下,您可能还会发现执行查询更有效:
if self.rated_by.filter(user_id=user.id).exists():
这将对数据库进行单个EXISTS查询。如果您不在rated_by
该特定对象上的其他任何地方使用queryset,那肯定比查询all()
和检查成员资格更有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句