繁体   English   中英

应用于查询集的列表类的count()方法。 奇怪的行为。 Django的

[英]count() method of the list class applied to queryset. Strange behaviour. Django

无法找出为什么我不断收到以下错误:

/ boats / reversion / count()处的TypeError带有1个位置参数,但给出了2个

#views
…
…
…

memory_limiter = BoatImage.objects.filter(boat_id__isnull=True).exclude(
    memory__in=existing_boats_pk).values_list("memory", flat=True)

for i in memory_limiter:
    if memory_limiter.count(i)  >  3:
        memory_limiter.remove(i)

Shell关于内存限制器的说法:


>>> for memory in memory_limiter:
...     print(memory, type(memory))
...
93 <class 'int'>
93 <class 'int'>
93 <class 'int'>
93 <class 'int'>
93 <class 'int'>
93 <class 'int'>
93 <class 'int'>
100 <class 'int'>
102 <class 'int'>
102 <class 'int'>
102 <class 'int'>
>>> memory_limiter
<QuerySet [93, 93, 93, 93, 93, 93, 93, 100, 102, 102, 102]>
>>>

以下方法带来相同的结果:


for i in [ x for x in memory_limiter]:
    if memory_limiter.count(i) > 3:
        memory_limiter.remove(i)

问题计数有什么问题? 我将这个列表复制粘贴到一个单独的*.py模块中,在这里工作正常……试图将qs转换为迭代器-相同的结果。

在单独的模块中

a = [93, 93, 93, 93, 93, 93, 93, 100, 102, 102, 102]

for i in a:
    if a.count(i) > 3:
        a.remove(i)
print(a)

----- >[93, 93, 93, 100, 102, 102, 102]

django在这里没有任何问题。

memory_limiter = BoatImage.objects.filter(boat_id__isnull=True).exclude(
    memory__in=existing_boats_pk).values_list("memory", flat=True) # This returns QuerySet object.

for i in memory_limiter:
    # QuerySet class has instance method .count(), but you can not provide parameters. Also, QuerySet does not support remove() method.
    # if memory_limiter.count(i)  >  3:
    print(memory_limiter.count())

您的代码在list 但是Django的QuerySet和python的list是不同的对象,使用不同的方法。

但是你可以做这样的事情。 这应该工作(恕我直言)。

memory_limiter = list(BoatImage.objects.filter(boat_id__isnull=True).exclude(
        memory__in=existing_boats_pk).values_list("memory", flat=True)) # You should cast QuerySet object into list, then you can operate over it as a normal python's list.
for i in memory_limiter:
    if memory_limiter.count(i)  >  3:
        memory_limiter.remove(i)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM