我正在尝试确保auth User模型的名字和姓氏字段不是可选的,但我不确定如何更改它。 我不能使用子类,因为我必须使用身份验证系统。

我能想到的两个解决方案是:1)将名称放在用户配置文件中,但是有一个我无法正确使用的字段有点傻。 2)以表格而不是模型进行验证。 我认为这不符合django的理念......

出于某种原因,我似乎无法在网上找到这样的方式,所以任何帮助都表示赞赏。 我原以为这会是一个很受欢迎的问题。

干杯,杜兰德

===============>>#1 票数:2 已采纳

我肯定会在表格上进行验证。 如果您愿意,您甚至可以在管理员中进行更多表单验证。

===============>>#2 票数:0

感谢Mbuso的建议。 这是我对那些感兴趣的人的全面实施。 在查看源代码之前,让我们看看它的样子: 管理Web屏幕截图

我已经实现了一个配置文件模型,但没有它就可以正常工作。

from django.core.exceptions import ValidationError
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserChangeForm
from django.contrib.auth.models import User
from apps.profiles.models import Profile


# Define an inline admin descriptor for Profile model
# which acts a bit like a singleton
class UserProfileInline(admin.StackedInline):
    model = Profile
    can_delete = False
    verbose_name_plural = 'profile'


class MyUserChangeForm(UserChangeForm):
    def clean_first_name(self):
        if self.cleaned_data["first_name"].strip() == '':
            raise ValidationError("First name is required.")
        return self.cleaned_data["first_name"]

    def clean_last_name(self):
        if self.cleaned_data["last_name"].strip() == '':
            raise ValidationError("Last name is required.")
        return self.cleaned_data["last_name"]


# Define a new User admin
class MyUserAdmin(UserAdmin):
    form = MyUserChangeForm
    inlines = UserProfileInline,


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

注意:如果您实现了配置文件模型,建议使用UserProfile作为名称,因为这是文档中的内容并且似乎是标准(此部分是在我开始处理项目之前开发的)。 如果您使用的是Django 1.5或更高版本,请同时跳过UserProfile并扩展User模型。

===============>>#3 票数:0

扩展基本用户模型的Django方式是通过用户配置文件:请参阅“ 存储有关用户的其他信息 ”。

如果它不符合您的需求,django.contrib.auth只是一个Django应用程序,我会简单地分叉它。 只要您遵守原始界面,我认为您将摆脱困境。

另一个选项是Pinax - 它内置了OpenId支持,您可以将它与您自己的openid提供程序一起使用。 OpenId本机支持是我在Django中真正想念的电池

  ask by Durand translate from so

未解决问题?本站智能推荐: