Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何与django allauth进行定制注册?_Django_Django Models_Django Forms_Django Templates_Django Allauth - Fatal编程技术网

如何与django allauth进行定制注册?

如何与django allauth进行定制注册?,django,django-models,django-forms,django-templates,django-allauth,Django,Django Models,Django Forms,Django Templates,Django Allauth,我试图在注册时向用户询问一些其他信息。我正在使用django allauth进行授权和身份验证。我尝试在注册过程中再添加三个字段。如果我运行它,它会显示标准表单加性别字段。然而,它似乎并没有真正起作用。如何保存数据?有人能帮忙吗?提前谢谢你 编辑:如果我只是使用 if form.is_valid(): form.save() return redirect('/success/') 我得到一个错误: save() missing 1 required positional ar

我试图在注册时向用户询问一些其他信息。我正在使用django allauth进行授权和身份验证。我尝试在注册过程中再添加三个字段。如果我运行它,它会显示标准表单加性别字段。然而,它似乎并没有真正起作用。如何保存数据?有人能帮忙吗?提前谢谢你

编辑:如果我只是使用

if form.is_valid():
    form.save()
    return redirect('/success/')
我得到一个错误:

save() missing 1 required positional argument: 'user'
我对django很陌生

我在项目中创建了注册应用程序

我把它放在allauth\u settings.py中:

ACCOUNT_SIGNUP_FORM_CLASS = 'signups.forms.MySignupForm'
from allauth.account.forms import SignupForm
from django import forms
from .models import UserProfile


class MySignupForm(SignupForm):
    class Meta:
        model = UserProfile

    gender = forms.CharField(max_length=1, label='gender')

    def save(self, user):
        user.gender = self.cleaned_data['gender']
        user.save()
from django.template import RequestContext
from django.shortcuts import render_to_response
from .forms import SignupForm


def index(request):
    form = MySignupForm(request.POST or None)

    if form.is_valid:
        ???

    return render_to_response("signups/index.html", locals(),
                              context_instance=RequestContext(request))
我的注册/model.py:

from django.contrib.auth.models import User
from django.db import models
from allauth.account.models import EmailAddress
from allauth.socialaccount.models import SocialAccount
import hashlib


class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name='profile')
    about_me = models.TextField(null=True, blank=True)
    timestamp = models.DateTimeField(auto_now_add= True, auto_now=False)
    updated = models.DateTimeField(auto_now_add= False, auto_now=True)

    GENDER_CHOICES = (
        ('m', 'Male'),
        ('f', 'Female'),
    )
    # gender can take only one of the GENDER_CHOICES options
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES,
                              verbose_name='Gender')

    def __unicode__(self):
        return self.user.username

    class Meta:
        db_table = 'user_profile'

    def profile_image_url(self):
        """
        Return the URL for the user's Facebook icon if the user is logged in via
        Facebook, otherwise return the user's Gravatar URL
        """
        fb_uid = SocialAccount.objects.filter(user_id=self.user.id, provider='facebook')

        if len(fb_uid):
            return "http://graph.facebook.com/{}/picture?width=40&height=40".format(fb_uid[0].uid)

        return "http://www.gravatar.com/avatar/{}?s=40".format(hashlib.md5(self.user.email).hexdigest())

def account_verified(self):
    """
    If the user is logged in and has verified hisser email address, return True,
    otherwise return False
    """
    if self.user.is_authenticated:
        result = EmailAddress.objects.filter(email=self.user.email)

        if len(result):
            return result[0].verified

    return False


User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
我的注册/表格.py

ACCOUNT_SIGNUP_FORM_CLASS = 'signups.forms.MySignupForm'
from allauth.account.forms import SignupForm
from django import forms
from .models import UserProfile


class MySignupForm(SignupForm):
    class Meta:
        model = UserProfile

    gender = forms.CharField(max_length=1, label='gender')

    def save(self, user):
        user.gender = self.cleaned_data['gender']
        user.save()
from django.template import RequestContext
from django.shortcuts import render_to_response
from .forms import SignupForm


def index(request):
    form = MySignupForm(request.POST or None)

    if form.is_valid:
        ???

    return render_to_response("signups/index.html", locals(),
                              context_instance=RequestContext(request))
我的注册/视图.py

ACCOUNT_SIGNUP_FORM_CLASS = 'signups.forms.MySignupForm'
from allauth.account.forms import SignupForm
from django import forms
from .models import UserProfile


class MySignupForm(SignupForm):
    class Meta:
        model = UserProfile

    gender = forms.CharField(max_length=1, label='gender')

    def save(self, user):
        user.gender = self.cleaned_data['gender']
        user.save()
from django.template import RequestContext
from django.shortcuts import render_to_response
from .forms import SignupForm


def index(request):
    form = MySignupForm(request.POST or None)

    if form.is_valid:
        ???

    return render_to_response("signups/index.html", locals(),
                              context_instance=RequestContext(request))
我的index.html非常基本,我只是想看看表单的表示:

{% extends 'account/base.html' %}

{% block head_title %}ProjectName{% endblock %}

{% block content %}
    <form method="POST" action="">
        {{ form.as_p }}
        <input type="submit">
    </form>
{% endblock %}
{%extends'帐户/base.html%}
{%block head\u title%}项目名称{%endblock%}
{%block content%}
{{form.as_p}}
{%endblock%}

您正在实例化
SignupForm
,它是视图中的标准表单,但不是您的
MySignupForm
。更改如下:

def index(request):
    form = MySignupForm()
    return render_to_response("signups/index.html", locals(),
                      context_instance=RequestContext(request))

嗨,桑托什,谢谢你!我也设法找到了这个。我编辑了上面的代码。但是,即使我现在看到字段(带有性别),我也无法保存数据。如果我只使用If form.is_valid():form.save()返回重定向('/success/'),我会得到一个错误:save()缺少1个必需的位置参数:“user”可能是