django-registration应用与Django 1.5自定义用户模型

11 投票
3 回答
5074 浏览
提问于 2025-04-17 18:25

我在使用django-registration这个应用,还有Django 1.5。请问如何创建一个自定义的用户模型,并在注册时保存这些数据?(请注意,我是用django-registration的):

class CustomProfile(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=255)
    bank = models.CharField(max_length=255)
    address = models.CharField(max_length=255)

?

3 个回答

0

Django-registration 1.0 最近发布了。这次更新完全重写了代码,使用了基于类的视图,并且支持 Django 1.0 的自定义用户模型。你可以查看一下 文档

4

这个链接讲解得很好,适用于django-registration 1.0。

除了上面的代码,这里还有一些额外的提示。

要更新名字,可以在models.py文件中进行修改。

def user_registered_callback(sender, user, request, **kwargs):
profile = ExUserProfile(user = user)
profile.is_human = bool(request.POST["is_human"])
user.first_name = request.POST["firstname"]
user.save()
profile.save()

user_registered.connect(user_registered_callback)

然后在forms.py文件中也要做相应的更改。

class ExRegistrationForm(RegistrationForm):
    is_human = forms.BooleanField(label = "Are you human?:")
    firstname = forms.CharField(max_length=30)
    lastname = forms.CharField(max_length=30)

最后,为了在表单上看到这些变化,需要创建一个合适的模板。你可以通过在你的应用中创建一个名为admin.py的文件来查看个人资料,并写入以下代码。

from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from prof.models import ExUserProfile

admin.site.unregister(User)

class UserProfileInline(admin.StackedInline):
    model = ExUserProfile

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

admin.site.register(User, UserProfileAdmin)
9

django-registration的主要版本现在还不支持django 1.5。

可以查看这个请求,里面有一些修复的内容。

你有三个选择:

  • 修改django-registration的代码。你可以从这个请求中获取需要的修改内容。
  • 使用一个已经修复的非官方版本。比如说这个版本
  • 等着主要版本更新……

撰写回答