【问题标题】:Newbie Django filter uniques 2 many values新手 Django 过滤器唯一 2 多个值
【发布时间】:2013-04-26 21:09:06
【问题描述】:

我正在尝试使用此表单从列表中过滤唯一性:

class SpecForm(ModelForm):
    a = Doctors_list.objects.values_list('specialty', flat=True)
    unique = {z: i for i, z in a}
    qs = Doctors_list.objects.filter(id__in=unique.values())
    specialty = forms.ModelChoiceField(queryset=qs)

class Meta:
    model = Doctors_list

一切对我来说似乎都是正确的,但我得到了这个错误:too many values to unpack

有什么提示吗?

【问题讨论】:

    标签: django forms filter unpack


    【解决方案1】:

    我认为正确的说法应该是这样的:

    unique = {z: i for i in a}
    

    您是否专门尝试将这些值放入字典中?这将产生一个列表:

    unique = [ i for i in a ]
    

    如果你这样做,你将不得不删除 qs = Doctors_list.objects.filter(id__in=unique.values()) 中的 .values() 留下它:

    qs = Doctors_list.objects.filter(id__in=unique)
    

    这里发生的情况是,在第一种方法中使用括号,您将创建一个只有一个键和一个列表作为该键的值的字典。当您发出.values() 时,您会得到一个包含字典值的列表。所以用字典是没有意义的。

    使用第二种方法,您可以直接获得一个列表。

    希望对你有帮助。

    【讨论】:

    • 我正在尝试制作一个选择菜单,我需要过滤列表
    • 好吧,我认为您最好采用我的第二种方法,然后删除 qs = Doctors_list.objects.filter(id__in=unique.values()) 中的 .value(),如下所示:qs = Doctors_list.objects.filter(id__in=unique)跨度>
    • 我现在遇到一个问题:qs = Doctors_list.objects.filter(id__in=unique.values()) ---->'list' 对象没有属性'values'
    • 看到上面的评论,我会编辑我的答案。删除 qs = Doctors_list.objects.filter(id__in=unique.values()) 中的 .value() 使其如下所示: qs = Doctors_list.objects.filter(id__in=unique)
    • 我按照你说的做了,但是我在列表中的第一项上遇到了一个奇怪的错误:invalid literal for int() with base 10: 'Dentista'
    猜你喜欢
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2011-11-29
    相关资源
    最近更新 更多