如何在不访问数据库的情况下从清理过的数据中创建queryset
或list
?
我在这里使用Django 1.5 FormWizard
和ModelFormSet
。以下内容不适用于错误:
'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)
那么有办法吗?
答案 0 :(得分:0)
您不能使用列表代替查询集,您必须将查询集分配给字段queryset属性,因此第一个错误。你必须点击数据库来制作查询集,所以我不确定你在问什么。您可以使用list comp:
来改进代码my_list = [item['car'].id for item in data]
答案 1 :(得分:0)
也许您可以发布表单声明,但似乎name
是ModelChoiceField
,因此需要一个查询集。您可以将其转换为简单的ChoiceField
,但您必须构建choices
:
form.fields['name'].choices = [(item['car'].id, unicode(item['car'])] for item in data]
但是,我不确定这是否会自动保存,如果这是ModelForm
,但我们需要表格声明来告诉我们。