【问题标题】:Django Form Error: Select a valid choice. ... is not one of the available choicesDjango 表单错误:选择一个有效的选项。 ...不是可用的选择之一
【发布时间】:2018-04-30 04:32:13
【问题描述】:

我正在尝试创建一个动态选择字段。我有一个创建元组列表的视图。元组的第一个值是对象 ServiceWriter 的主键,而第二个值是 ServiceWriter 的名称。然后列表被传递到表单类中。当我进行选择并提交页面时,表单被确定为无效,并且在 shell 中打印以下表单错误:“选择一个有效的选择。(元组的第一个值。即 1,2,3 ..)是不是可用的选择之一。”

forms.py

class CreateAdvancedRO(forms.Form):
service_writer = forms.ChoiceField()

def __init__(self, writer_choices, *args, **kwargs):
    super(CreateAdvancedRO, self).__init__(*args, **kwargs)
    self.fields['service_writer'].choices = writer_choices
    self.helper = FormHelper()
    self.helper.form_id = 'id-create-advanced-ro'
    self.helper.form_method = 'post'
    self.helper.add_input(Submit('submit', 'Open Repair Order'))

注意:我没有使用 ModelForm。

views.py
class CreateAdvancedRO(View):                                                                    
form_class = CreateAdvancedRO                                                                
writer_form = CreateServiceWriter                                                            
add_line_form = AddJobLine                                                                   

def post(self, request):                                                                     
    writer_choices = []                                                                      
    form = self.form_class(writer_choices, request.POST)                                     
    print(form.errors)                                                                       
    if form.is_valid():                                                                      
        '''Do something'''                        
    else:                                                                                                                                                                       
        writer_choices = []                                                                  
        try:                                                                                 
            writers = ServiceWriter.objects.filter(user=request.user)                        
            for writer in writers:                                                           
                writer_choices.append((str(writer.id), writer.name))                         
        except ObjectDoesNotExist:                                                           
            pass                                                                             
        form = self.form_class(writer_choices, request.POST)                                 
        writer_form = self.writer_form()                                                     
        add_line_form = self.add_line_form()                                                 
        return render(request, 'free/advanced_create.html', {'form': form, 'writer_form': wri
                                                             'add_line_form': add_line_form})

我在视图中尝试了以下两种方法:

writer_choices.append((str(writer.id), writer.name)) and
writer_choices.append((writer.id, writer.name))

这里是 ServiceWriter 模型,以防万一。

class ServiceWriter(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=20, blank=False)

def __str__(self):
    return str(self.name)

有什么想法吗? 感谢您的帮助。

【问题讨论】:

    标签: python django forms django-forms


    【解决方案1】:

    您似乎正在尝试根据一个空的选项列表来验证表单。您是否尝试过在实例化或尝试验证表单之前填充 writer_choices?

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 2012-05-13
      • 2016-05-18
      • 1970-01-01
      • 2012-01-22
      • 2020-10-30
      • 2016-09-30
      • 2018-06-11
      • 2021-04-12
      相关资源
      最近更新 更多