gpt4 book ai didi

django - 表单ModelChoiceField queryset +额外选择字段Django表单

转载 作者:行者123 更新时间:2023-12-04 09:37:41 26 4
gpt4 key购买 nike

我正在尝试创建一个表单,其中ModelChoiceField从queryset加载,并且我想向ModelChoiceField添加一些自定义值以进行扩展,我已经使用了选择字段,如下所示,但是在更新表单时却出现了以下错误

表格错误:
选择一个有效的选择。该选择不是可用的选择之一。

代码 :

 self.fields['lead'] = forms.ModelChoiceField(queryset = Pepole.objects.filter(poc__in       = ('lead','sr.lead')))
self.fields['lead2'] = forms.ModelChoiceField(queryset = Pepole.objects.filter(role__in = ('lead','sr.lead')))
choice_field = self.fields['lead']
choice_field.choices = list(choice_field.choices) + [('None', 'None')]
choice_field = self.fields['lead2']
choice_field.choices = list(choice_field.choices) + [('None', 'None')]

我在这里做错什么吗?

最佳答案

那是行不通的。查看ModelChoiceField的工作方式:

try:
key = self.to_field_name or 'pk'
value = self.queryset.get(**{key: value})
except self.queryset.model.DoesNotExist:
raise ValidationError(self.error_messages['invalid_choice'])
return value

您不能向其中随机添加任何内容。

请改用 ChoiceField并自定义处理数据。
class TestForm(forms.Form):
mychoicefield = forms.ChoiceField(choices=QS_CHOICES)

def __init__(self, *args, **kwargs):
super(TestForm, self).__init__(*args, **kwargs)
self.fields['mychoicefield'].choices = \
list(self.fields['mychoicefield'].choices) + [('new stuff', 'new')]

def clean_mychoicefield(self):
data = self.cleaned_data.get('mychoicefield')
if data in QS_CHOICES:
try:
data = MyModel.objects.get(id=data)
except MyModel.DoesNotExist:
raise forms.ValidationError('foo')
return data

关于django - 表单ModelChoiceField queryset +额外选择字段Django表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5281195/

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