class FriendshipManager(models.Manager):
def are_friends(self, user1, user2):
if self.filter(from_user=user1, to_user=user2).count() > 0:
return True
if self.filter(from_user=user2, to_user=user1).count() > 0:
return True
return False
我找到了count() 所以我试试看, 但它运行错误
a=[1,2,3,4]
print a.count()
或
a='ssada'
print a.count()
为什么我的代码运行错误,但FriendshipManager可以运行,谢谢 请尝试使用代码而不是文本,因为我的英语不是很好,谢谢
答案 0 :(得分:8)
这里的问题是你混淆了两个同名的方法。
在Python中的序列中,count()
完全符合Dustin描述的“计算序列中参数出现次数。”
然而,您引用的代码来自Django模型。在那里,在过滤器对象上调用count()
是SQL分组函数COUNT
的别名,它总结了匹配行的数量。
从本质上讲,初始示例中的count
和之后两个示例中的count
根本不是同一种方法。
答案 1 :(得分:5)
如果您想确定列表的长度/大小,我想您想使用len(a)
而不是a.count()
。 a.count()
实际上需要一个论证。它计算值的出现次数。例如:
a = [2, 6, 2, 1, 5, 3, 9, 5]
print a.count(5) #should display 2 because there are two elements with a value of 5
print a.count(3) #should display 1 because there is only one element with a value of 3
答案 2 :(得分:3)
len是正确的。
>>> a=[1,2,3,4]
>>> print len(a)
4
答案 3 :(得分:0)
我不确定这是否是正确答案,但是,请尝试使用此代替您拥有的模型管理器代码。这样的话没有大的变化。
class FriendshipManager(models.Manager):
def are_friends(self, user1, user2):
if self.filter(from_user=user1, to_user=user2).count() or self.filter(from_user=user2, to_user=user1).count():
return True
return False
如果count()返回零以外的值,它将始终返回True。