我在代码上有一个列表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
任何帮助表示赞赏
答案 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