2012-07-08 87 views
0

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选项。

+0

'clean_is_active'不必返回'self.cleaned_data [“is_active”]''。你看了控制台吗?你在那里得到“我在这里......”的信息吗?导致清理方法不必不返回任何内容。如果他们在保存的对象中发现某些不一致,他们只需要提出一个'ValidationError' – marianobianchi 2012-07-08 15:46:56

+0

@marianobianchi谢谢。你是对的,我用'干净'来迷惑自己。但无论如何。不,我没有在控制台中看到任何打印声明。这是奇怪的部分:(我甚至实现了一个干净的方法,只是说'K = 1',它仍然能够改变国旗!!!这意味着Django没有拿起我的自定义类: – User007 2012-07-08 16:34:12

回答

1

也许问题是,你应该从UserAdmin从Django的管理模式继承您的自定义MyUserAdmin ...

在这里你可以找到如何做到这一点的例子:Customizing an Admin form in Django while also using autodiscover

当您添加一个变化像这样,你应该重启你的服务器(重启manage.py或者apache或者你正在使用的任何东西)

+0

谢谢。我实际上有'UserAdmin',但它不起作用,我将它改为'admin.ModelAdmin'。无论如何,我已经附上了完整的代码。BUt没有任何选项可以解决我的问题,太奇怪了。默认情况下,在urls.py中已经有'autodiscover'了,我故意设置一个新的1.4来测试这个 – User007 2012-07-08 17:53:36

+0

啊,我认为这个方法覆盖了编辑页面,换句话说,你点击了editpage看看我的失败代码的效果,所以它不会触发,如果你在列表视图页 – User007 2012-07-08 18:18:12

+0

哦,我现在看到你的问题,我不知道你是用列表视图来编辑你的数据库的记录。也许[这](http://stackoverflow.com/questions/10524794/preventing-edit-conflict-in-djangos-list-editable-with-multiple-us ers)可以帮助你。 – marianobianchi 2012-07-10 13:01:22

相关问题