gpt4 book ai didi

django - ModelChoiceField 在表单提交时给出无效的选择错误

转载 作者:行者123 更新时间:2023-12-04 05:45:00 28 4
gpt4 key购买 nike

我想允许用户删除与特定模型相关联的外键列表。

假设我们有这两个模型:


class IceBox(models.Model):
...

class FoodItem(models.Model):
name = models.CharField(...)
icebox = models.ForeignKey(IceBox)

def __unicode__(self):
return self.name


用于选择多个要删除的食品的表单:

class IceBoxEditForm(forms.Form):
fooditems = forms.ModelChoiceField(queryset=FoodItem.objects.none(), widget=forms.CheckboxSelectMultiple(), empty_label=None)

对应的 View :

def icebox_edit(request, item=None):
# Grab the particular icebox
icebox = get_object_or_404(IceBox, pk=item)

if request.method == "POST":
form = IceBoxEditForm(request.POST)
print request.POST
if form.is_valid():
# Delete should happen
else:
form = IceBoxEditForm()
# Only use the list of fooditems that this icebox holds
form.fields['fooditems'].queryset = icebox.fooditem_set.all()

return render_to_response('icebox_edit.html', {'form':form},context_instance=RequestContext(request))

该表单正确列出了与该冰箱关联的食品的复选框。但是,当我选择某些内容然后提交表单时,我会收到表单错误:
Select a valid choice. That choice is not one of the available choices.
是否还有其他一些我错过的 Django 期望的自定义​​验证?

编辑:我试过这个,但它给出了一个语法错误:

form:
class IceBoxEditForm(forms.Form):
fooditems = forms.ModelChoiceField(queryset=FoodItem.objects.none(), widget=forms.CheckboxSelectMultiple(), empty_label=None)


def __init__(self, *args, **kwargs):
queryset = kwargs.pop('queryset', None)
super(IceBoxEditForm, self).__init__(*args, **kwargs)

if queryset:
self.fields['fooditems'].queryset = queryset

view:
form = IceBoxEditForm(queryset=icebox.fooditem_set.all(), request.POST) # Syntax error!

....
else:
form = IceBoxEditForm(queryset=icebox.fooditem_set.all())
....

最佳答案

您已经为 GET 请求更改了字段的查询集,但没有为 POST 更改。所以当你提交表单的时候,Django 还在使用原来的查询集,所以你的选择是无效的。

要么在 View 的开头更改它,以便 POST 和 GET 都会发生这种情况,或者甚至更好地在表单的 __init__ 中进行更改方法。

关于django - ModelChoiceField 在表单提交时给出无效的选择错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10788777/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com