【问题标题】:Radio button in djangodjango 中的单选按钮
【发布时间】:2019-12-28 22:09:04
【问题描述】:

尝试寻找解决方案,但我有一个不同的问题,找不到任何相关的东西 我创建了一个 django 表单,其中包含来自 models.py 的字段

forms.py

from .models import ProValue
from django import forms


class SchoolInput(forms.ModelForm):
    school_name = forms.CharField(
        max_length=255, required=True, widget=forms.TextInput(
            attrs={
                'class': 'input'
            }
        ))
    level_of_grades = forms.IntegerField(min_value=1, required=True)
    num_of_days = forms.IntegerField(min_value=1, max_value=7, required=True)
    division_check = forms.ChoiceField(
        label='Do you have multiple divisions for your grades?', widget=forms.RadioSelect)

    class Meta:
        model = ProValue
        answer = (
            ('no', 'no'),
            ('yes', 'yes')
        )
        fields = [
            'school_name',
            'level_of_grades',
            'num_of_days',
            'division_check',
        ]

这样我在页面上看不到单选按钮 我试过做

    division_check = forms.ChoiceField(
        label='Do you have multiple divisions for your grades?', widget=forms.RadioSelect())

    division_check = forms.ChoiceField(
        label='Do you have multiple divisions for your grades?', widget=forms.RadioSelect(choice=answer))

这告诉我答案没有定义

这是我的models.py

from django.db import models
from django import forms


class ProValue(models.Model):
    school_name = models.CharField(max_length=50)
    level_of_grades = models.IntegerField()
    num_of_days = models.IntegerField()
    answer = (
        ('Yes', 'Yes'),
        ('No', 'No'),
    )
    division_check = models.CharField(
        max_length=5, choices=answer)

另外我需要在 Meta 类中再次定义答案吗?我一开始没有做,我试图解决上面的问题,但还是不行。

【问题讨论】:

    标签: python django django-forms django-templates


    【解决方案1】:

    您在 Meta 类中定义了 answers,但在定义小部件时它不在范围内。

    您可以参考模型中的选项,例如:

    from .models import ProValue
    from django import forms
    
    
    class SchoolInput(forms.ModelForm):
        school_name = forms.CharField(
            max_length=255, required=True, widget=forms.TextInput(
                attrs={
                    'class': 'input'
                }
        ))
        level_of_grades = forms.IntegerField(min_value=1, required=True)
        num_of_days = forms.IntegerField(min_value=1, max_value=7, required=True)
        division_check = forms.ChoiceField(
            label='Do you have multiple divisions for your grades?',
            choices=ProValue.answer,
            widget=forms.RadioSelect
        )
    
        class Meta:
            model = ProValue
            fields = [
                'school_name',
                'level_of_grades',
                'num_of_days',
                'division_check',
            ]

    【讨论】:

      【解决方案2】:

      您的模型很好,您可以从表单中删除自定义字段division_check,只需更改表单Meta 中的小部件和标签

      class Meta:
          model = ProValue
          fields = [
              'school_name',
              'level_of_grades',
              'num_of_days',
              'division_check',
          ]
          widgets = {
              'division_check': forms.RadioSelect,
          }
          labels = {
              'division_check': 'Do you have multiple divisions for your grades?',
          }
      

      【讨论】:

      • 谢谢,但没有帮助。
      猜你喜欢
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多