且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Python / Django django注册添加一个额外的字段

更新时间:2023-12-02 08:36:40

我已经找出了解决这个问题的方法,我会发布这里有人可以使用它。这很简单,我想。

I have figured out a solution to this problem, and I will post it here in case somebody can use it. It's pretty simple, I suppose.

步骤1 添加一个新模型,这将是一个配置文件,在models.py:

Step 1 Add a new model, which will be a profile, in the models.py:

#models.py
class user_profile(models.Model):
     user=models.ForeignKey(User, unique=True)
     institution=models.CharField(max_length=200)

     def __unicode__(self):
         return u'%s %s' % (self.user, self.institution)

步骤2 创建将使用此模型的表单:

Step 2 Create the form that will use this model:

#forms.py
from registration.forms import RegistrationForm
from django.forms import ModelForm
from Test.models import user_profile

class UserRegForm(RegistrationForm):
    institution=forms.CharField(max_length=200)

步骤3 创建ragbackend.py并定义数据的保存方式:

Step 3 Create ragbackend.py and define how the data will be saved:

from Test.models import user_profile
from forms import *

def user_created(sender, user, request, **kwargs):
    form = UserRegForm(request.POST)
    data = user_profile(user=user)
    data.institution = form.data["institution"]
    data.save()

from registration.signals import user_registered
user_registered.connect(user_created)

步骤4 转到urls.py并进行以下更改:

Step 4 Go to urls.py and make the following changes:

import regbackend 
from registration.views import register

url(r'^accounts/register/$', register, {'backend': 'registration.backends.default.DefaultBackend','form_class': UserRegForm}, name='registration_register'),
(r'^accounts/', include('registration.urls')),

请注意,您必须按照该顺序放置网址。很容易理解为什么。

Note that you have to put the URLs in that order. Easy to understand why.

步骤5 现在一切正常,但是您在管理网站上看不到信息。所以你必须去admin.py,然后添加:

Step 5 Now everything works, but you cannot see the information in the admin site. So you have to go to admin.py and add:

#admin.py
from django.contrib.auth.models import User
from Test.models import user_profile
admin.site.unregister(User)
class UserProfileInline(admin.StackedInline):
    model = user_profile

class UserProfileAdmin(UserAdmin):
    inlines = [ UserProfileInline, ]
admin.site.register(User, UserProfileAdmin)

就是这样。不要在 runserver 之前忘记 syncdb 。我希望这会帮助某人。

And that's it. Do not forget the syncdb before runserver. I hope this will help someone.