2012-04-18 80 views
5

晚上好,在Django中扩展用户配置文件。管理员创建用户

我目前正在用Django创建一个站点,并且我用用户配置文件扩展了用户。虽然我有一个小问题。这是我的情况:

  1. 我扩展了用户配置文件以添加自定义字段。
  2. 我将模型添加到用户管理模型中,所以当我添加用户时,我可以直接填写字段以创建配置文件。
  3. 现在,如果我不在这些新的自定义用户字段中添加ANYING,在用户添加页面中,Django Admin不会给我一个错误,说这些字段为空(并且它们不是假设的)
  4. 我希望它在此用户添加管理页面中引发错误,以便管理员在添加新用户时必须填写配置文件。
  5. 所有用户都将被添加到管理面板中。

这可能吗?非常感谢!

在admin.py

from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin 
from django.contrib.auth.models import User 
from accounts.models import UserProfile 


class UserProfileInline(admin.TabularInline): 
    model = UserProfile 


class UserAdmin(DjangoUserAdmin): 
    inlines = [ UserProfileInline,] 


admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 

在model.py

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    employee_number = models.PositiveIntegerField(unique=True) 

    def __unicode__(self): 
     return 'Number' 

回答

5

默认情况下,空行内是允许的,因此没有进一步的检查将采取一个空形式。你需要手动覆盖它:

class UserProfileForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(UserProfileForm, self).__init__(*args, **kwargs) 
     if self.instance.pk is None: 
      self.empty_permitted = False # Here 

    class Meta: 
     model = UserProfile 


class UserProfileInline(admin.TabularInline):   
    model = UserProfile        
    form = UserProfileForm 
+0

不错,它的工作!你介意多说一些代码吗?尤其是类Meta:部分!谢谢队友 – abisson 2012-04-19 02:59:09

+0

另外,如果我只想让其中一个字段为empty_permitted = false,那么语法是什么?其余的都是真的? – abisson 2012-04-19 03:42:34

+0

@abisson'empty_permitted'是'BaseForm'接受的未公开的参数:当提交的表单没有从其初始数据改变,并且它的'empty_permitted'是'True',表单的'full_clean()'不会执行任何进一步验证。你可以在'django/forms/forms.py'和'django/forms/formsets.py'中检查'empty_permitted'。如果你想让其中一个字段不为空,你可以尝试为表单设置'empty_permitted = True',为其他字段设置'blank = True'。 – okm 2012-04-19 04:17:26

相关问题