Django无法用set(mysql)消除重复的条目

时间:2013-04-30 22:11:33

标签: python mysql django list filter

我在代码上有一个列表a,我希望消除重复的条目。 我在这里看到了一个非常干净的方法:http://love-python.blogspot.pt/2008/09/remove-duplicate-items-from-list-using.html 我正在使用mysql

但当我访问该页面时,我收到此错误:'list' object has no attribute 'all'我无法确定这是来自何处!

forms.py

from testApp.models import Ficha_medico
from django.forms import ModelForm
from django    import forms

class MenuForm(ModelForm):
    a = Ficha_medico.objects.values_list('zona', flat=True)
    a = list (set(a))
    zona = forms.ModelChoiceField(queryset=a)
    class Meta:
        model = Ficha_medico

任何帮助表示赞赏

2 个答案:

答案 0 :(得分:0)

错误消息告诉您它的来源。

列表不是查询集。您不能将其作为字段的queryset参数传递。

要消除查询集中的重复项,请使用.distinct()

答案 1 :(得分:0)

.values_list()返回list个对象,而不是查询集。

显然,如果你使用PostgreSQL,这样的东西会起作用:

a = Ficha_medico.objects.distinct('zona')

对于其他人,我怀疑有更好的方法,但这可行:

class MenuForm(ModelForm):
    items = Ficha_medico.objects.values_list(('id', 'zona'), flat=True)
    # get a single 'id' per 'zona'
    # --> since we don't know how many there are cycle through all
    # --> note: this will overwrite existing values, but doesn't seem to matter.
    uniques = {z: i for i, z in items}

    # re-query to retrieve only the necessary number of unique zona values
    qs = Ficha_medico.objects.filter(id__in=uniques.values())

    zona = forms.ModelChoiceField(queryset=qs)
    class Meta:
        model = Ficha_medico