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)
当我提出验证错误时它不起作用并显示错误页面 异常类型:验证错误 例外值:[u'Bla Bla']
答案 0 :(得分:7)
根据model admin methods上的django文档,save_model()无论如何都必须保存对象。您只能使用此方法在保存之前执行额外处理。我同意Wogan,你应该创建一个自定义ModelForm并覆盖它的clean()方法并在那里引发错误。
答案 1 :(得分:5)
在自定义ModelForm
中进行验证,然后告诉您的ModelAdmin
使用该表单。
Django Documentation的这一部分可以帮助你。
答案 2 :(得分:1)
你可以使用类似的东西
from django.contrib import messages
messages.error(request, '<Your message>')
它将被保存,但用户可以看到出现问题。
答案 3 :(得分:0)
以下是一个例子:
def clean_name(self): if something: raise forms.ValidationError("Something went wrong") return self.cleaned_data["name"]
答案 4 :(得分:0)
你应该创建一个表单 -
class CourseAdminForm(forms.ModelForm):
def clean(self):
raise ValidationError("Bla Bla")
答案 5 :(得分:0)
最简单的方法,无需创建自定义表单然后使用它:
1.在你的Models.py中添加&#34;空白=真&#34;例如:
Zone_Name = models.CharField(max_length=100L,unique=True,blank=True )
2.在同一类Models.py(不在Admin.py中)中创建或添加现有的Clean方法,对所需字段进行验证,例如:
def clean(self):
if self.Zone_Name == None or not self.Zone_Name :
raise ValidationError("Zone name is not given!")