Django在ModelForm中的分期选择更好的方法?

2024-09-27 22:33:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经为我的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,但它有点让我的皮肤爬行有条件地添加项目到两个列表中,同时在第一个列表中检查成员资格。似乎应该有一个更好的方法来完成这个任务


Tags: 方法inself表单init选项argskwargs

热门问题