【问题标题】:How to solve is_hidden error of choicefield in Django model forms?如何解决Django模型表单中choicefield的is_hidden错误?
【发布时间】:2020-04-17 06:32:25
【问题描述】:

我正在创建一个表单来保存数据,其中 from 和 to days 是 models.py 中的选择字段。因此,我将 forms.py 中的表单模型设为选择字段。我已经做到了这一点。

models.py

class Create_Class(models.Model):
    created_by = models.ForeignKey(
        User, on_delete=models.SET_NULL, null=True, default=1)
    class_name = models.CharField(max_length=150, null=True)
    from_choice = (
        ('Mon', 'Monday'),
        ('Tue', 'Tuesday'),
        ('Wed', 'Wednesday'),
        ('Thu', 'Thursday'),
        ('Fri', 'Friday'),
        ('Sat', 'Saturday'),
        ('Sun', 'Sunday'),
    )
    from_days = models.CharField(max_length=10, choices=from_choice)
    to_days = models.CharField(max_length=10, choices=from_choice)
    from_time = models.TimeField()
    to_time = models.TimeField()
    created_on = models.DateTimeField(auto_now=True)

forms.py

class Create_Class_Model_Form(forms.ModelForm):
    class Meta:
        model = Create_Class
        exclude = ['created_by', 'created_on']
        fields = ['class_name', 'from_days', 'to_days', 'from_time', 'to_time']
        from_choice = (
            ('Mon', 'Monday'),
            ('Tue', 'Tuesday'),
            ('Wed', 'Wednesday'),
            ('Thu', 'Thursday'),
            ('Fri', 'Friday'),
            ('Sat', 'Saturday'),
            ('Sun', 'Sunday'),
        )
        widgets = {
            'class_name': forms.TextInput(attrs={'class': 'form-control'}),
            'from_days': forms.ChoiceField(choices=from_choice, widget=forms.ChoiceWidget),
            'to_days': forms.ChoiceField(choices=from_choice, widget=forms.Select()),
            'from_time': forms.TimeInput(attrs={'class': 'form-control'}),
            'to_time': forms.TimeInput(attrs={'class': 'form-control'}),
        }

Views.py

def Class_create(request):
    form = Create_Class_Model_Form(request.POST or None)
    if form.is_valid():
        obj = form.save(commit=False)
        obj.created_by = request.user.username
        obj.save()
        print('successful')
        messages.success(request, 'Saved Successfully')
    c_names = Name_of_classes.objects.values('name')
    templatename = 'genius/class_create.html'
    context = {'form': form, 'c_names': c_names}
    return render(request, templatename, context)

错误

ChoiceField' object has no attribute 'is_hidden'

错误来自 forms.py

感谢您帮助解决此错误。

【问题讨论】:

    标签: django python-3.x django-models django-forms


    【解决方案1】:

    ChoiceField 不是小部件。只需将其添加为字段即可。

    class Create_Class_Model_Form(forms.ModelForm):
        from_days = forms.ChoiceField(choices=<the choices>)
        to_days = forms.ChoiceField(choices=<the choices>)
    
       class Meta:
          ....
    

    【讨论】:

    • @VikrantAgrahari 很好。如果你能标记我的答案有解决方案,那就太好了。
    猜你喜欢
    • 2014-08-31
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2020-12-16
    • 2020-12-03
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多