【问题标题】:Django FilteredSelectMultiple: 'TypeError while rendering: unpack non-sequence'Django FilteredSelectMultiple:'渲染时出现类型错误:解包非序列'
【发布时间】:2011-02-21 15:23:59
【问题描述】:

我正在尝试替换 Admin 中的默认 ManyToManyField 小部件以使用 FilteredSelectMultiple,但遇到了一些问题。我的错误是Caught TypeError while rendering: unpack non-sequence

这是我的模型

class Car(models.Model):
    parts = models.ManyToManyField('Part')

class Part(models.Model):
    name = models.CharField(max_length=64)

这是我的 ModelAdmin

class CarAdmin(admin.ModelAdmin):
    form = myforms.CustomCarForm

这是 CustomCarForm

 class CustomCarForm(forms.ModelForm):
     def __init__(self, *args, **kwargs):
         super(CustomCarForm, self).__init__(*args, **kwargs)
         parts = tuple(Part.objects.all())
         self.fields['parts'].widget = admin.widgets.FilteredSelectMultiple(
             'Parts', False, choices=parts
         )

当我尝试查看管理员表单时收到此错误

Request Method:     GET
Request URL:        http://127.0.0.1:8000/admin/foo/car/1/
Django Version:     1.2.5
Exception Type:     TemplateSyntaxError
Exception Value:    Caught TypeError while rendering: unpack non-sequence
Exception Location: /usr/lib/python2.4/site-packages/Django-1.2.5-py2.4.egg/django/forms/widgets.py in render_options, line 464
Python Executable:  /usr/bin/python
Python Version:     2.4.3

如果我使用其中任何一个设置parts,则会出现此错误

parts = Part.objects.all()
parts = list(Part.objects.all())
parts = tuple(Part.objects.all())

如果我这样做

parts = Part.objects.value_list('name')

我收到Caught ValueError while rendering: need more than 1 value to unpack

编辑:如果我取出choices=parts,它会渲染得很好,但是选择框是空白的,我需要在其中添加一些东西。

【问题讨论】:

    标签: python django


    【解决方案1】:
            for option_value, option_label in chain(self.choices, choices):
    

    显然,choices 是一个元组列表,第一个值为option_value,第二个值为option_label

    我不确定第一个需要是什么,但我猜是 pk。

    试试:

    parts = [(x.pk, x.name) for x in Part.objects.all()]
    

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2022-11-10
      • 2021-10-15
      • 2016-12-06
      • 2015-09-06
      相关资源
      最近更新 更多