0

我有一个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

任何帮助表示赞赏

4

2 回答 2

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
于 2013-04-30T22:20:29.897 回答
0

错误消息告诉您它来自哪里。

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

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

于 2013-04-30T22:19:41.577 回答