Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
Python 如何在Django中创建配置文件注册表?_Python_Django_Django Registration - Fatal编程技术网

Python 如何在Django中创建配置文件注册表?

Python 如何在Django中创建配置文件注册表?,python,django,django-registration,Python,Django,Django Registration,我正在尝试创建一个自定义注册表单,但我真的不知道怎么做,因为我正在尝试将默认的django注册与一个新模型连接起来 这是它看起来的样子,它可能是错误的,但我正在考虑这样的事情 型号.py class Profile(models.Model): user = models.OneToOneField(User) name = models.CharField(max_length=20, blank=True, null=True) description = model

我正在尝试创建一个自定义注册表单,但我真的不知道怎么做,因为我正在尝试将默认的django注册与一个新模型连接起来

这是它看起来的样子,它可能是错误的,但我正在考虑这样的事情

型号.py

class Profile(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=20, blank=True, null=True)
    description = models.TextField(max_length=400)
def register_user(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/user/')
    else:
        if request.method == 'POST':
            form = MyRegistrationForm(request.POST)
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('/user/')

        context = {'profil':Profile.objects.all()}
        context.update(csrf(request))
        context['form'] = MyRegistrationForm()

        return render(request, 'register.html', context)
class MyRegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = {'username', 'password1', 'password2', 'email'}

    def save(self, commit=True):

        my_user = super(MyRegistrationForm, self).save(commit=False)
        my_user.email = self.cleaned_data['email']

        new_profile = Profile(user=my_user, name="John", description="a person")

        if commit:
            new_profile.save()

        return new_profile
<form action="/user/register/" method="post" id="register" autocomplete="off">
{% csrf_token %}
<div class="fieldWrapper">
  {{ form.username.errors }}
  {{ form.username.label_tag }}
  {{ form.username }}
</div>
[... other fiels ...]
<input type="submit" value="Register"/>
</form>
视图.py

class Profile(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=20, blank=True, null=True)
    description = models.TextField(max_length=400)
def register_user(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/user/')
    else:
        if request.method == 'POST':
            form = MyRegistrationForm(request.POST)
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('/user/')

        context = {'profil':Profile.objects.all()}
        context.update(csrf(request))
        context['form'] = MyRegistrationForm()

        return render(request, 'register.html', context)
class MyRegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = {'username', 'password1', 'password2', 'email'}

    def save(self, commit=True):

        my_user = super(MyRegistrationForm, self).save(commit=False)
        my_user.email = self.cleaned_data['email']

        new_profile = Profile(user=my_user, name="John", description="a person")

        if commit:
            new_profile.save()

        return new_profile
<form action="/user/register/" method="post" id="register" autocomplete="off">
{% csrf_token %}
<div class="fieldWrapper">
  {{ form.username.errors }}
  {{ form.username.label_tag }}
  {{ form.username }}
</div>
[... other fiels ...]
<input type="submit" value="Register"/>
</form>
forms.py

class Profile(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=20, blank=True, null=True)
    description = models.TextField(max_length=400)
def register_user(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/user/')
    else:
        if request.method == 'POST':
            form = MyRegistrationForm(request.POST)
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('/user/')

        context = {'profil':Profile.objects.all()}
        context.update(csrf(request))
        context['form'] = MyRegistrationForm()

        return render(request, 'register.html', context)
class MyRegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = {'username', 'password1', 'password2', 'email'}

    def save(self, commit=True):

        my_user = super(MyRegistrationForm, self).save(commit=False)
        my_user.email = self.cleaned_data['email']

        new_profile = Profile(user=my_user, name="John", description="a person")

        if commit:
            new_profile.save()

        return new_profile
<form action="/user/register/" method="post" id="register" autocomplete="off">
{% csrf_token %}
<div class="fieldWrapper">
  {{ form.username.errors }}
  {{ form.username.label_tag }}
  {{ form.username }}
</div>
[... other fiels ...]
<input type="submit" value="Register"/>
</form>
register.py

class Profile(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=20, blank=True, null=True)
    description = models.TextField(max_length=400)
def register_user(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/user/')
    else:
        if request.method == 'POST':
            form = MyRegistrationForm(request.POST)
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('/user/')

        context = {'profil':Profile.objects.all()}
        context.update(csrf(request))
        context['form'] = MyRegistrationForm()

        return render(request, 'register.html', context)
class MyRegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = {'username', 'password1', 'password2', 'email'}

    def save(self, commit=True):

        my_user = super(MyRegistrationForm, self).save(commit=False)
        my_user.email = self.cleaned_data['email']

        new_profile = Profile(user=my_user, name="John", description="a person")

        if commit:
            new_profile.save()

        return new_profile
<form action="/user/register/" method="post" id="register" autocomplete="off">
{% csrf_token %}
<div class="fieldWrapper">
  {{ form.username.errors }}
  {{ form.username.label_tag }}
  {{ form.username }}
</div>
[... other fiels ...]
<input type="submit" value="Register"/>
</form>

{%csrf_令牌%}
{{form.username.errors}
{{form.username.label_tag}
{{form.username}
[…其他领域…]
我试图将模型与表单连接起来,所以当有人注册时,当我在模板中键入他的名字时,就像这样:
{{user.name}
应该是“John”


如何实现这一目标?

此外,为了在模板中获得名称,您必须像
{{user.profile.name}}
一样访问它,因为名称保存在配置文件模型中

但是如果你想为你的个人资料模型创建一个表单,你可以这样做

class ProfileForm(forms.ModelForm):
    class Meta:
         model = Profile
         fields = ("name", "description")
此外,如果您计划在同一HTML表单中同时使用UserCreationForm和ProfileForm,则应向其添加前缀,以了解哪些数据属于哪个表单,请在此处查看如何操作

编辑

def register_user(request):
    #...
    if request.method == "POST":
        user_form = UserCreationForm(request.POST, prefix="user")
        profile_form = ProfileForm(request.POST, prefix="profile")
        if user_form.is_valid() and profile_form.is_valid():
            user = user_form.save(commit=False)
            user.save()
            profile = profile_form.save(commit=False)
            profile.user = user
            profile.save()
            return redirect('/')
    else:
        user_form = UserCreationForm(prefix="user")
        profile_form = ProfileForm(prefix="profile")
    context = {
        "user_form": user_form,
        "profile_form": profile_form
    }
    return render(request, 'register.html', context)
然后在模板中

<form action="/user/register/" method="post" id="register" autocomplete="off">
{% csrf_token %}
<div class="fieldWrapper">
    {{ user_form }}
    {{ profile_form }}
</div>
<input type="submit" value="Register"/>

{%csrf_令牌%}
{{user_form}}
{{profile_form}}

我想要您提出的最后一个解决方案,但如何注册可以进行身份验证的用户(字段=用户名、电子邮件、密码1、密码2、名称、说明)