在__init__的Django表单中验证具有自定义约束的输入数据

Abhivemp

在我的项目中,用户正在应用程序的设置页面中输入数据,并且应该使用用户的设置首选项更新数据库。我阅读了Alasdair的答案,以及如何使用__init__()可以访问用户的详细信息。我想知道是否可以从中返回数据,__init__()以便在调用save()视图中函数之前可以验证输入的数据这就是我尝试过的(但没有奏效)。我愿意以更好的方式来解决这个问题,因此,我感谢您的所有建议!

**编辑:**我决定移动对用户在表单文件中输入的数据的验证,因为当我在视图中编写数据时,最终得到5条if语句(嵌套)。IMO,考虑到此应用程序的情况,将其移至表格似乎是一种更清洁的方法。我也考虑过使用clean _ ['field'],但是我需要函数中side变量__init__()来做到这一点,而且我不确定如何提取该值。

Forms.py

class t_max_form(forms.ModelForm):

    side = None

    def __init__(self, *args, **kwargs):
        side = kwargs.pop('side', None)

        super(t_max_form, self).__init__(*args,**kwargs)

        if side == "ms":
            self.fields['hs_max_sessions'].widget.attrs.update({'class':'form-control', 'readonly':True})
            self.fields['ms_max_sessions'].widget.attrs.update({'class':'form-control mb-3'})
        elif side == "hs":
            self.fields['hs_max_sessions'].widget.attrs.update({'class':'form-control'})
            self.fields['ms_max_sessions'].widget.attrs.update({'class':'form-control', 'readonly':True})
        else:
            self.fields['hs_max_sessions'].widget.attrs.update({'class':'form-control'})
            self.fields['ms_max_sessions'].widget.attrs.update({'class':'form-control'})

     
        #Trying to validate the data here
        valid_session_count = settings.objects.first()
        if(side == "ms"):
            input_sessions = self.fields['ms_max_sessions'].widget.attrs['readonly']
            if(input_sessions > valid_session_count.max_sessions):
                self.add_error("ms_max_sessions", "You have entered more than the limit set by the TC. Try again")
         elif(side == "hs"):
             input_sessions = self.cleaned_data['hs_max_sessions']
             if(input_sessions > valid_session_count.max_sessions):
                 self.add_error("hs_max_sessions", "You have entered more than the limit set by the TC. Try again")
         else:
             input_sessions = self.cleaned_data['ms_max_sessions'] + self.cleaned_data['hs_max_sessions']
             if(input_sessions > valid_session_count.max_sessions):
                 self.add_error("hs_max_sessions", "You have entered more than the limit set by the TC. Try again")

        return input_sessions

这就是我在尝试的观点

views.py

def t_time_slots(request):
    name = request.user.username
    t = t_info.objects.get(student__user__username = name)
    timeSlots = tutor_time_slot.objects.filter(tutor = tutor).order_by('time') 
    side = decide_side(request.user)
    
    if request.method == 'POST':
        form = t_time_slot_form(request.POST)

        if form.is_valid():
            if check_unique_time_slot(request.user, form.cleaned_data['day'], form.cleaned_data['time']):
                timeSlots = form.save(commit=False)
                timeSlots.t = t
                timeSlots.save()
                messages.success(request, "Added Successfully")
                return redirect('TTimeSlot')
            else:
                print("Overlap")
                messages.error(request, "The time slot overlaps with a Current one. Please Change the time and try again.")
                return redirect('TTimeSlot')
    else:
        form = t_time_slot_form()
        
    context = {'timeSlots': timeSlots, 'form': form, 'side':side}
    return render(request, 't/t_time_slot.html', context)
阿拉斯代尔

self.side__init__方法中进行设置,然后可以在clean()clean_<field>方法中进行访问

我会避免将验证代码放入__init__方法中。

class MyForm(forms.Form):

    my_field = forms.CharField()

    def __init__(self, *args, **kwargs):
        self.side = kwargs.pop('side', None)

        super(t_max_form, self).__init__(*args,**kwargs)
        ...

    def clean_my_field(self):
        my_field = self.cleaned_data['my_field']
        # Use self.side to validate data
        if my_field = self.side:
            raise forms.ValidationError("Invalid")
        return my_field

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在__init__的Django表单中验证具有自定义约束的输入数据

来自分类Dev

Django自定义表单-__init__方法可用时is_valid不调用clean方法

来自分类Dev

ListView中的Django自定义表单验证

来自分类Dev

VBA表单中的自定义数据验证

来自分类Dev

在CodeIgniter 2.2.0中,为什么表单验证器不对数组输入数据调用我的自定义验证例程?

来自分类Dev

django自定义表单验证错误

来自分类Dev

Angular 表单自定义验证数据

来自分类Dev

播放验证-具有特定字段错误的自定义表单字段验证

来自分类Dev

jQuery验证自定义验证器,在元数据标签和消息中具有多个参数

来自分类Dev

具有自定义的输入字段

来自分类Dev

具有自定义验证方法的WTForms表单永远无效

来自分类Dev

Aurelia:具有可重复使用的validateable自定义元素的验证表单

来自分类Dev

不带formLogin()但具有自定义登录表单的Spring Boot身份验证

来自分类Dev

Aurelia:具有可重复使用的validateable自定义元素的验证表单

来自分类Dev

为什么自定义输入控件在Ant Design表单中无法正确验证?

来自分类Dev

Django中的自定义表单更新

来自分类Dev

Angular 2自定义表单控件,以模板驱动方式具有多个输入

来自分类Dev

Angular 2模板驱动的表单,具有自定义输入

来自分类Dev

TFF:具有自定义数据集的自定义输入规范-TypeError:“ TensorSpec”类型的对象没有len()

来自分类Dev

Django admin中的自定义验证

来自分类Dev

具有自定义数据的ListView

来自分类Dev

Django 1.8自定义验证表单不起作用

来自分类Dev

Django 表单不调用自定义验证器

来自分类Dev

如何在Django中以其他形式重用自定义表单验证规则

来自分类Dev

自定义表单集验证在Django中不起作用

来自分类Dev

Django表单不输出输入的自定义类属性

来自分类Dev

具有多个文件的自定义表单数据到Web API控制器

来自分类Dev

具有多个文件的自定义表单数据到Web API控制器

来自分类Dev

如何从表单中的所有输入中复制自定义属性,然后分配回去?

Related 相关文章

  1. 1

    在__init__的Django表单中验证具有自定义约束的输入数据

  2. 2

    Django自定义表单-__init__方法可用时is_valid不调用clean方法

  3. 3

    ListView中的Django自定义表单验证

  4. 4

    VBA表单中的自定义数据验证

  5. 5

    在CodeIgniter 2.2.0中,为什么表单验证器不对数组输入数据调用我的自定义验证例程?

  6. 6

    django自定义表单验证错误

  7. 7

    Angular 表单自定义验证数据

  8. 8

    播放验证-具有特定字段错误的自定义表单字段验证

  9. 9

    jQuery验证自定义验证器,在元数据标签和消息中具有多个参数

  10. 10

    具有自定义的输入字段

  11. 11

    具有自定义验证方法的WTForms表单永远无效

  12. 12

    Aurelia:具有可重复使用的validateable自定义元素的验证表单

  13. 13

    不带formLogin()但具有自定义登录表单的Spring Boot身份验证

  14. 14

    Aurelia:具有可重复使用的validateable自定义元素的验证表单

  15. 15

    为什么自定义输入控件在Ant Design表单中无法正确验证?

  16. 16

    Django中的自定义表单更新

  17. 17

    Angular 2自定义表单控件,以模板驱动方式具有多个输入

  18. 18

    Angular 2模板驱动的表单,具有自定义输入

  19. 19

    TFF:具有自定义数据集的自定义输入规范-TypeError:“ TensorSpec”类型的对象没有len()

  20. 20

    Django admin中的自定义验证

  21. 21

    具有自定义数据的ListView

  22. 22

    Django 1.8自定义验证表单不起作用

  23. 23

    Django 表单不调用自定义验证器

  24. 24

    如何在Django中以其他形式重用自定义表单验证规则

  25. 25

    自定义表单集验证在Django中不起作用

  26. 26

    Django表单不输出输入的自定义类属性

  27. 27

    具有多个文件的自定义表单数据到Web API控制器

  28. 28

    具有多个文件的自定义表单数据到Web API控制器

  29. 29

    如何从表单中的所有输入中复制自定义属性,然后分配回去?

热门标签

归档