【问题标题】:Make field's queryset from cleaned_data从cleaned_data制作字段的查询集
【发布时间】:2013-09-13 10:04:00
【问题描述】:

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

'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)

那么有办法解决吗?

【问题讨论】:

  • 非常困惑 - 清理后的数据来自 POST 表单,而查询集用于填充 GET 请求中的模型表单。运行此代码的工作流程是什么?
  • @professorDante 清理后的数据来自表单向导的上一步。

标签: django django-queryset django-forms django-formwizard


【解决方案1】:

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

my_list = [item['car'].id for item in data]

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多