0

如何在不访问数据库的情况下从已清理的数据中生成 aqueryset或 a ?list我正在使用 Django 1.5FormWizardModelFormSet这里。以下不适用于该错误:

'list' 对象没有属性 'all'

这意味着你不能使用列表,对吗?

def get_form(self, step=None, data=None, files=None):
    form = super(MyWizard, self).get_form(step=step, data=data, files=files)
    #...
    data = self.get_cleaned_data_for_step('a')
    list = []
    for item in data:
        list.append(item['car']) # This is the choice of a ForeigenKey
    #...
    form.fields['name'].queryset = list

这是有效的,但在我看来你做了两次工作:

def get_form(self, step=None, data=None, files=None):
    form = super(MyWizard, self).get_form(step=step, data=data, files=files)
    #...
    data = self.get_cleaned_data_for_step('a')
    list = []
    for item in data:
        list.append(item['car'].id) # This is the choice of a ForeigenKey
    #...
    form.fields['name'].queryset = SomeClass.objects.filter(pk__in=list)

那么有办法解决吗?

4

2 回答 2

0

您不能使用列表代替查询集,您必须将查询集分配给字段查询集属性,因此出现第一个错误。你必须点击数据库来制作查询集,所以我不确定你在问什么。您可以使用列表组合改进代码:

my_list = [item['car'].id for item in data]
于 2013-09-10T16:27:50.447 回答
0

也许您可以发布您的表单声明,但它似乎name是 a ModelChoiceField,因此需要一个查询集。您可以将其转换为简单的ChoiceField,但您必须构建choices

form.fields['name'].choices = [(item['car'].id, unicode(item['car'])] for item in data]

但是,我不确定这是否会自动保存,以防这是 ​​a ModelForm,但话又说回来,我们需要表单声明来说明。

于 2013-09-12T12:49:54.243 回答