sách gpt4 ai đã đi

django - Python/Django django-registration 添加一个额外的字段

In lại 作者:行者123 更新时间:2023-12-04 16:26:14 36 4
mua khóa gpt4 Nike

我已经阅读了很多关于如何在使用 Django 注册时添加额外字段的信息,例如 đây , đâyđây 。代码片段是:
forms.py(来自注册应用程序)

class RegistrationForm(forms.Form):
username = forms.RegexField(regex=r'^\w+$', max_length=30, widget=forms.TextInput(attrs=attrs_dict), label=_("Username"), error_messages={ 'invalid': _("This value must contain only letters, numbers and underscores.") })
email = forms.EmailField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=75)), label=_("Email"))
password1=forms.CharField(widget=forms.PasswordInput(attrs=attrs_dict, render_value=False), label=_("Password"))
institute=forms.CharField(max_length=50) #This is the new!
password2 = forms.CharField(widget=forms.PasswordInput(attrs=attrs_dict, render_value=False), label=_("Password (again)"))
captcha = CaptchaField()

我使用django的注册保存方法,在默认后端:
def register(self, request, **kwargs):
username, email, password = kwargs['username'], kwargs['email'], kwargs['password1']
if Site._meta.installed:
site = Site.objects.get_current()
khác:
site = RequestSite(request)
new_user = RegistrationProfile.objects.create_inactive_user(username, email,
password, site)

signals.user_registered.send(sender=self.__class__,
user=new_user,
request=request)
return new_user

在models.py中我创建了一个新类:
class UserProfile(models.Model):  
user = models.OneToOneField(User)
institute=models.CharField(max_length=50)
def create_user_profile(sender, instance, created, **kwargs):
if created:
profile, created = UserProfile.objects.get_or_create(user=instance)
post_save.connect(create_user_profile, sender=User)

在 admin.py 中:
admin.site.unregister(User)
class UserProfileInline(admin.StackedInline):
model = UserProfile
class UserProfileAdmin(UserAdmin):
inlines = [ UserProfileInline, ]
admin.site.register(User, UserProfileAdmin)

我也没有改变任何东西。当我呈现表单时,我可以看到我添加的 Institute 字段。当我在管理站点时,我可以看到每个用户的用户配置文件。但是,当我创建新用户时,那里没有保存任何内容,而用户的其他详细信息通常会保存。我认为我需要某种配置,但在哪里?也许在 Django 注册应用程序的文件中?

1 Câu trả lời

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

步骤 1 在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 创建将使用此模型的表单:
#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 并定义数据的保存方式:
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 并进行以下更改:
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')),

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

步骤 5 现在一切正常,但您看不到管理站点中的信息。所以你必须去 admin.py 并添加:
#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)

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

关于django - Python/Django django-registration 添加一个额外的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14726725/

36 4 0
Bài viết được đề xuất: haskell - 如何将 ByteString 转换为 Int 并处理字节序?
Bài viết được đề xuất: xcode - Kobold2d 将 Xcode 升级到 4.6 后生成错误
Bài viết được đề xuất: regex - gsub 的倒数
Bài viết được đề xuất: scala - Scala 中的多键映射
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com