Django Forms在表单中捕获url模式

时间:2018-06-04 15:05:47

标签: django-forms

对于更新模型并忽略未编辑的字段,我正在使用get_form_kwargs和 init 来表示我无法收到电子邮件的表单。

url pattern

class EditUserProfile(View):
            template_name = 'dashboard/user_role_edit.html'
            form_class = EditUserRoleForm

            def get_form_kwargs(self):
                form_kwargs = super().get_form_kwargs()
                if 'email_id' in self.kwargs:
                    form_kwargs["email"]=kwargs['email_id']
                return form_kwargs

            def get(self, request, *args, **kwargs):
                user_detail_fields = User.filterAll(email=kwargs['email_id']).values('email','usertype_id','name','mobile_no','usertype__usertype')
                context = {'user':User.getAll(id=request.session['current_user']),'users':user_detail_fields, 'usertype':UserType.objects.all(),'form':self.form_class(None)}
                return render(request, self.template_name, context)

            def post(self, request, *args, **kwargs):
                email_id = {'email_id':kwargs['email_id']}
                pdb.set_trace()
                form = self.form_class(data=request.POST)
                if form.is_valid():
                    pdb.set_trace()
                    pass
                else:
                    pdb.set_trace()
                    user_detail_fields = User.filterAll(email=kwargs['email_id']).values('email','usertype_id','name','mobile_no','usertype__usertype')
                    context = {'user':User.getAll(id=request.session['current_user']),'users':user_detail_fields, 'usertype':UserType.objects.all(),'form':self.form_class(request.POST)}
                    return render(request, self.template_name, context)

views.py

class EditUserRoleForm(forms.ModelForm):
            def __init__(self, form_kwargs=None,*args, **kwargs):
                import pdb;pdb.set_trace()
                self.mail = kwargs.pop("form_kwargs")
                super(EditUserRoleForm, self).__init__(*args, **kwargs)

                # import pdb;pdb.set_trace()                    
                # self.email = kwargs.pop("email_id")


            class Meta:
                model = User
                fields = ('email','name','mobile_no','usertype',)

            def clean_email(self):      
                email = self.cleaned_data.get('email')      
                import pdb; pdb.set_trace()
                email_list = [x['email'] for x in User.objects.all().values('email')]
                # email_list.remove(self.initial['email_id'])
                if email in email_list:
                    raise forms.ValidationError("Sorry, that Email ID was Taken. Please try again.")
                else:
                    return self.cleaned_data

Form.py

{{1}}

解决这个问题的最佳做法是什么。谢谢。

0 个答案:

没有答案