我已经为我的ChoiceField
设置了如下初始化表单时的选项:
class EventForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(EventForm, self).__init__(*args, **kwargs)
buid_choices = [(v.id,v.buid) for v in Vendor.objects.exclude(buid='').order_by('buid')]
self.fields['vendors'].choices = buid_choices
上面的代码可以很好地用选项填充表单,但是在为Vendor
返回的queryset中有重复的buid
,我也不能另外过滤queryset,以便只为buid提供唯一的值(除非有我不知道的queryset方法)。我使用的是sqlite3后端,所以使用.distinct()
是不可能的
有没有人能建议一种更好的方法,在不多次点击数据库的情况下执行以下操作?
vendors = Vendor.objects.exclude(buid='').order_by('buid')
buid_list, buid_choices = [],[]
for v in vendors:
if v.buid not in buid_list:
buid_list.append(v.buid)
buid_choices.append((v.id,v.buid))
这将给我我想要的…没有重复的buid,但它有点让我的皮肤爬行有条件地添加项目到两个列表中,同时在第一个列表中检查成员资格。似乎应该有一个更好的方法来完成这个任务
目前没有回答
相关问题 更多 >
编程相关推荐