基于条件的Django清理方法(两个视图中使用一种形式)
我有一个表单,在两个视图中使用。一个保存,一个编辑/更新。我使用一个clean函数来检查独特的条件。(表单有三个字段。三个字段的组合只能出现一次。) 现在,当我使用相同的表单时,它会检查视图-保存和编辑的条件。这将导致表单在“编辑”视图中抛出一个错误,指出该值已存在 我如何才能使用这个clean方法,让它检查save视图的验证,而不检查edit视图 编辑视图:基于条件的Django清理方法(两个视图中使用一种形式),django,django-forms,django-views,Django,Django Forms,Django Views,我有一个表单,在两个视图中使用。一个保存,一个编辑/更新。我使用一个clean函数来检查独特的条件。(表单有三个字段。三个字段的组合只能出现一次。) 现在,当我使用相同的表单时,它会检查视图-保存和编辑的条件。这将导致表单在“编辑”视图中抛出一个错误,指出该值已存在 我如何才能使用这个clean方法,让它检查save视图的验证,而不检查edit视图 编辑视图: @login_required def permissionEditView(request, pk): data = mode
@login_required
def permissionEditView(request, pk):
data = models.PermissionModel.objects.get(pk=pk)
p_form = forms.PermissionForm(instance=data)
if request.method == 'POST':
p_form = forms.PermissionForm(request.POST, instance=data)
if p_form.is_valid():
p_form.save()
messages.success(request, 'Permission updated successfully.')
return redirect(companyProfileView)
return render(request, 'company_profile.html', {'p_form': p_form})
保存视图:
def permissionFormView(request):
p_form = forms.PermissionForm()
if request.method == 'POST':
p_form = forms.PermissionForm(request.POST)
if p_form.is_valid():
p_form.save()
messages.success(request, 'Permission added successfully.')
return redirect(companyProfileView)
return render(request, 'company_profile.html', {'p_form': p_form})
使用清洁方法形成:
class PermissionForm(forms.ModelForm):
class Meta:
model = models.PermissionModel
fields = '__all__'
def clean(self):
role = self.cleaned_data.get('role_name')
feature = self.cleaned_data.get('feature')
if models.PermissionModel.objects.filter(role_name=role, feature=feature).exists():
raise forms.ValidationError('Permission exists.')
def __init__(self, *args, **kwargs):
super(PermissionForm, self).__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].widget.attrs = {'class': 'form-control form-control-sm'}
您可以在clean方法中检查实例
您可以使用clean方法检查实例谢谢您的想法。为了让代码正常工作,我不得不对代码稍加修改。我把它和self关键字一起使用------如果不是self.form.instance:接受这个想法。谢谢你的想法。为了让代码正常工作,我不得不对代码稍加修改。我把它和self关键字一起使用-----如果不是self.form.instance:接受这个想法。
def clean(self):
role = self.cleaned_data.get('role_name')
feature = self.cleaned_data.get('feature')
if not form.instance:
if models.PermissionModel.objects.filter(role_name=role, feature=feature).exists():
raise forms.ValidationError('Permission exists.')