Django有list_editable
。我需要编辑is_active
标志。将自定义验证添加到管理员的Django的auth_user list_editable
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from django.contrib import admin
from django.db.models import Q
from django import forms
class MyUserAdminForm(forms.ModelForm):
class Meta:
model = User
#def clean_is_active(self):
# do something that validates your data
# print ' I am here... '
# print self.cleaned_data
# print self
def clean(self):
k = 1
class MyUserAdmin(UserAdmin):
list_display = ["id", "username", "email", "is_staff", "is_superuser", "is_active", "date_joined"]
search_fields = ["username", "email"]
list_display_links = ["id", "username"]
list_editable = ("is_active",)
list_per_page = 50
form = MyUserAdminForm
# Had to unregister the User so it could be registered with MyUserAdmin
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
我把这个admin.py
,我已经注册我的admin.ModelAdmin
代码。显示效果很好。所以MyUserAdmin
工作正常。
由于干净的方法,此代码应该失败。但事实并非如此。它显然没有使用MyUserAdminForm
。我需要清理is_active。
谢谢。
注意我从admin.ModelAdmin
而不是UsreAdmin
继承。我用所有的组合,我可以有......
更新
我觉得这段代码只为编辑页面是有用的,不是为list_editable
选项。
'clean_is_active'不必返回'self.cleaned_data [“is_active”]''。你看了控制台吗?你在那里得到“我在这里......”的信息吗?导致清理方法不必不返回任何内容。如果他们在保存的对象中发现某些不一致,他们只需要提出一个'ValidationError' – marianobianchi 2012-07-08 15:46:56
@marianobianchi谢谢。你是对的,我用'干净'来迷惑自己。但无论如何。不,我没有在控制台中看到任何打印声明。这是奇怪的部分:(我甚至实现了一个干净的方法,只是说'K = 1',它仍然能够改变国旗!!!这意味着Django没有拿起我的自定义类: – User007 2012-07-08 16:34:12