在重写save_model()函数时如何在admin.py中使用验证?

Ans*_*hul 6 django django-admin

Admin.py

class CourseAdmin(admin.ModelAdmin):

list_display = ('course_code', 'title', 'short' )

 def save_model(self, request, obj, form, change):
    import os

    #obj.author = request.user
    dir_name = obj.course_code
    path = settings.MEDIA_ROOT +os.sep+'xml'+os.sep+dir_name

    #if user updates course name then course would be renames
    if change:
        dir_name = Course.objects.get(pk=obj.pk).course_code
        src = settings.MEDIA_ROOT +os.sep+'xml'+os.sep+dir_name      
        os.rename(src,path)
    else:
        if not os.path.exists(path):
            os.makedirs(path)
            obj.save()

        else:
            raise ValidationError('Bla Bla')


admin.site.register(Course, CourseAdmin)
Run Code Online (Sandbox Code Playgroud)

当我提出验证错误它不起作用并显示错误页面与异常类型:验证错误异常值:[u'Bla Bla']

gla*_*xly 7

根据模型管理方法的 django文档,save_model()无论如何都必须保存对象.您只能使用此方法在保存之前执行额外处理.我同意Wogan,你应该创建一个自定义ModelForm并覆盖它的clean()方法并在那里引发错误.


Asd*_*sdf 6

这是一个例子:

def clean_name(self):
    if something:
        raise forms.ValidationError("Something went wrong")
    return self.cleaned_data["name"]
Run Code Online (Sandbox Code Playgroud)


Eya*_* Ch 6

你应该创建一个表格-

在您的 CourseAdminForm 中:

class CourseAdminForm(forms.ModelForm):

    def clean(self):
        raise ValidationError("Bla Bla") 
Run Code Online (Sandbox Code Playgroud)


Wog*_*gan 5

在自定义中进行验证ModelForm,然后告诉您ModelAdmin使用该表单.

这部分Django文档应该可以帮到你.