gpt4 book ai didi

python - 'QuerySet' 从 Django 1.4 到 1.7 的变化

转载 作者:太空宇宙 更新时间:2023-11-04 10:28:06 25 4
gpt4 key购买 nike

我正在尝试从 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__(),而是调用 len(mylist),而不是调用 myobj.__unicode__() 你做 unicode(myobj)

不过,在这种特殊情况下,您可能还会发现执行查询更有效:

if self.rated_by.filter(user_id=user.id).exists():

这将针对单个 EXISTS 查询命中数据库。如果您没有在该特定对象的任何其他地方使用 rated_by 查询集,这肯定比查询 all() 和检查成员资格更有效。

关于python - 'QuerySet' 从 Django 1.4 到 1.7 的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28281499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com