【问题标题】:Django form throws select valid choiceDjango 表单抛出选择有效的选择
【发布时间】:2016-05-03 16:12:57
【问题描述】:

我已经阅读了这个问题的所有答案,但没有一个能完全解决我的问题。我希望有人可以帮助我理解我的代码中有什么问题。我的模型中有一个字段,我希望该字段中的所有值都显示在表单的下拉列表中。我能够做到这一点,但是当我尝试保存时,它显示“选择一个有效的选择。该选择不是可用的选择之一。”任何帮助将不胜感激。

models.py

class Item(models.Model):
    Product = models.ForeignKey("Product", related_name = "Items")
    Name = models.CharField(max_length=1000, blank=True, null=True)
    Tag = models.CharField(max_length=1000, blank=True, null=True)

forms.py

class ItemForm(ModelForm):
    items = Item.objects.values_list('Name', flat=True)
    item_choices = [(item, item) for item in items]
    Name = forms.ModelChoiceField(items, widget=forms.Select())
    class Meta:
        model = Item
        fields = ['Name', 'Tag']

views.py

def newknowledgebase(request):
    itemformset = modelformset_factory(Item, form=ItemForm, extra=2) 
    items = itemformset(queryset=Item.objects.none(), prefix='items', )
    if request.method=='POST':
        items = itemformset(request.POST, queryset=Item.objects.none(), prefix='items', )
        item = request.POST.get('items')
        for form in items:
            form.fields['Name'].choices = [(item, item)]
        if items.is_valid():
            items.save()

    context = {
        'items':items,
    }
    return render(request, 'newknowledgebase.html', context ) 

html文件

<div id="items" class="panel-collapse collapse">
        <table class="table table-bordered">
            <tbody>
                {{ items }}
            </tbody>
        </table>
    </div>

【问题讨论】:

  • 选择框选项在呈现的 HTML 中具有哪些值?此外,尝试使用小写命名您的表单和模型字段。将标题和骆驼外壳保留在您的班级名称中; python.org/dev/peps/pep-0008
  • 选择框选项按预期列出所有项目名称。如果有 10 个项目,则这些项目的所有名称都列在选择框中。谢谢你的建议,我会遵循的。

标签: django django-models django-forms django-templates


【解决方案1】:

试试这个

Name = forms.ChoiceField(item_choices, widget=forms.Select())

【讨论】:

  • 出现任何错误或不显示任何值。可以分享一下代码吗?
  • 这是我的错,你的回答有效!非常感谢。
猜你喜欢
  • 2015-07-06
  • 2012-01-22
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
相关资源
最近更新 更多