如何以干净的形式获得选定的值?

问题描述

我想根据选定的字段验证字段。但是,当我将打印件放在表单上时,选择字段显示为无(但在视图中我可以毫无问题地获取值)。

models.py

class NyModel1(models.Model):
    field1 = models.CharField(max_length=50)
    description = models.TextField(blank=True)

    def __str__(self):
        return self.field1


class MyModel2(models.Model):
    
    f_field = models.ForeignKey(NyModel1,on_delete=models.PROTECT)

我的模板

<select id ="id_field" class="select" name="f_field" required=True>

        {% for value,field in Form.fields.f_field.choices %}
 
          <option value="{{value}}">
              {{field}}
          </option>
        {% endfor %}
      </select>

forms.py

class Form(forms.ModelForm):

    document = forms.CharField()

    class Meta:
        model = MyModel2
        fields = ['f_field','document']

    def clean_document(self):
        doc = self.cleaned_data.get('document')
        f= self.cleaned_data.get('f_field')
        
        print("Document: ",doc) 
        print("f Field : ",f)

        if f == "something one":
            
            #validate document
        else:
            #other action

        return doc

在打印中出现:

Document: 12345
f Field : None

编辑:

在我看来,我可以看到 f_field 的值。

查看.,py

def MyView(request):

    if request.method == 'POST':
        my_form = MyForm(request.POST)
       
        if my_form.is_valid():
            
            f_field = my_form.cleaned_data['f_field']
            
            print("Value f_field: ",f_field)  # Here it's OK. I can see the value.
           
            return redirect("my_url")
    else:
       my_form = MyForm()
        

    context = {}
    context['Form'] = my_form 
    

    return render(request,"my_app/template.html",context)

我可以在视图中看到值,但在表单中看不到(显示为无)。

如何在forms.py中获取select 的值?

解决方法

修复你的 html

来自

<select id ="id_fild" class="select" name="f_fild" required=True>

<select id ="id_field" class="select" name="f_field" required=True>