对于更新模型并忽略未编辑的字段,我正在使用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}}
解决这个问题的最佳做法是什么。谢谢。