微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。