【问题标题】:counting queryset returns 'list' object has no attribute 'id'计数查询集返回“列表”对象没有属性“id”
【发布时间】:2012-09-10 06:37:27
【问题描述】:

我有一个带有多对多列的模型。我想限制用户可以提交的组数。

这就是我正在做的事情

        group_name = [g.id for g in form.cleaned_data['groups']]
        gr=group_name.id.count()
        if gr>3:
            raise forms.ValidationError("you can only add 3 groups")
        return group_name

错误是:

 Exception Value: 'list' object has no attribute 'id'

我似乎找不到我做错了什么。谢谢。

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:

    您正在创建一个list 对象,因此标准的list 操作有效。

    group_name_ids = [g.id for g in form.cleaned_data['groups']]
    group_id_count = len(group_name_ids)
    

    看来"groups" 这里是一个模型对象列表,所以你可以通过以下方式获得计数:

    group_count = len(form.cleaned_data["groups"])
    

    但是,由于您返回了生成的 group_name_ids 列表,您不妨只获得其中的 len()

    【讨论】:

    • 谢谢!我没有过多地探索 len 因为the documentation 说:“注意:如果您只想确定集合中的记录数,请不要在 QuerySets 上使用 len() ”。但是这么小的一套,没关系。谢谢!
    • 是的,对于查询集,您应该使用 .count(),但在这里您引用表单的 clean_data 字典并列出 id。
    【解决方案2】:

    group_name 是一个列表,group_name.id 无法解析:)

    【讨论】:

    • 感谢叶夫根的回复。我怎样才能使它可数?或者,有没有办法计算cleaned_data?
    • 对不起,我对 Django 不是很熟悉。你想做什么?也许 len(group_name) 做你想做的事?
    • 这就是解决方案,但蒙库特先到了那里。
    【解决方案3】:
    >>> nk=['city1','city2','city1','city3','city1']
    >>> from collections import Counter
    >>> mycount=Counter()
    >>> for word in nk:
    ...     mycount[word]+=1
    ...     
    >>> mycount['city1']
    3
    >>> 
    

    参考python文档http://docs.python.org/library/collections.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 2012-12-18
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多