Django有list_editable
。我需要编辑is_active
标志。
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
工作正常。
由于clean方法,此代码应该失败。但事实并非如此。它显然没有使用MyUserAdminForm
。我需要清理is_active。
感谢。
注意我继承自admin.ModelAdmin
而不是UsreAdmin
。我已经使用了我可以拥有的所有组合......
更新
我认为这段代码仅对编辑页面有用,而不适用于list_editable
选项。
答案 0 :(得分:2)
也许问题是您应该从django的管理模型继承自MyUserAdmin
的自定义UserAdmin
...
您可以在此处找到如何执行此操作的示例:Customizing an Admin form in Django while also using autodiscover
当您添加这样的更改时,您应该重新启动服务器(重新启动manage.py或apache或者您正在使用的任何内容)