Django表单字段验证 - 如何判断操作是插入还是更新?

Al *_*ndy 4 django django-models django-forms django-validation

我正在尝试在Django中执行此操作:在Admin中保存对象时,我想根据我的第一个对象中的一个字段保存另一个不同类型的对象.为了做到这一点,我必须检查第二个对象是否已经存在,并且只返回第一个对象中特定字段的验证错误.我的问题是,只有当操作是插入时,我才希望验证错误出现在字段中.

如何根据知道操作是更新还是插入来显示特定管理表单字段的验证错误?

PS我知道对于模型验证这是不可能的,因为验证器只接受value参数,但我认为应该可以进行表单验证.

Al *_*ndy 8

这可以通过在Django Admin Form中编写clean_ [name_of_field]方法来完成.可以通过测试self.instance.pk来检查插入或更新操作.

class EntityAdminForm(forms.ModelForm):
    def clean_field(self):
        field = self.cleaned_data['field']
        insert = self.instance.pk == None
        if insert:
            raise forms.ValidationError('Some error message!')
        else:
            pass
        return field

class EntityAdmin(admin.ModelAdmin):
    form = EntityAdminForm
Run Code Online (Sandbox Code Playgroud)

在使用Django管理员注册实体模型时,您必须使用EntityAdmin类:

admin.site.register(Entity, EntityAdmin)
Run Code Online (Sandbox Code Playgroud)