2016-11-25 3 views
4

私のウェブアプリケーションでallauthをサインアップする機能を使用しました。ソーシャルアカウントのサインアップでは、ユーザーの電子メール、パスワード、姓名から収集されます。サインインフォームでは、ユーザーから電子メールとパスワードを収集するだけです。サインアップ後にallauthのユーザープロファイルフィールドをカスタマイズする方法

ログインすると、自分のプロファイルを更新するはずのプロフィールページ(私が追加した「施設」のように、新しいフィールドとカスタマイズされたフィールドを含む)にリダイレクトされます。

django-allauthの初心者の質問です。これらの新しいカスタマイズされたフィールドを自分のユーザープロファイルに追加する方法と、ユーザーがサインアップした後にこれらのデータを更新する方法を知りたいと思います。 profile_page.htmlでMY_PROJECT/models.py

from django.db import models 
from django.contrib.auth.models import User 

class UserProfile(models.Model): 

    institution = models.TextField(max_length=254) 

{% extends 'base.html' %} 
{% block title %}Profile Page{%endblock title%} 

{% if user.is_authenticated %} 

{%block body%} 

    <div class="col-md-6" > 
     <div class="panel panel-default"> 
      <div class="panel-body"> 
       <h1 class="text-center"><b>MY ONTOLOGIES</b></h1><br> 
      </div> 
     </div> 
    </div> 
    <div class="col-md-6" > 
     <div class="panel panel-default"> 
      <div class="panel-body"> 
       <h1 class="text-center"><b>MY PROFILE</b></h1><br> 
        <div class="form-group"> 
         {% csrf_token %} 
         <label for="id_login" class="col-sm-2 control-label">E-mail:</label> 
         <div class="col-sm-10"> 
          <input type="email" id="asd" value="{{user.email}}" name="login" class="form-control" required /> 
         </div><br><br> 
         <label for="first_name" class="col-sm-2 control-label">First Name:</label> 
         <div class="col-sm-10"> 
          <input type="text" id="id_first_name" value="{{user.first_name}}" name="first_name" class="form-control" required /> 
         </div><br><br> 
         <label for="last_name" class="col-sm-2 control-label">Last Name:</label> 
         <div class="col-sm-10"> 
          <input type="text" id="id_last_name" value="{{user.last_name}}" name="last_name" class="form-control" required /> 
         </div><br><br> 
         <label for="institution" class="col-sm-2 control-label">Institution:</label> 
         <div class="col-sm-10"> 
          <input type="text" id="id_institution" value="{{user.institution}}" name="institution" class="form-control" placeholder="University/Company" required /> 
         </div><br><br> 
         <label for="id_password1" class="col-sm-2 control-label">New Password:</label> 
         <div class="col-sm-10"> 
          <input class="form-control" id="id_password1" name="password1" placeholder="New Password" type="password" /> 
         </div><br><br> 
         <label class="col-sm-2" for="id_password2">New Password (again):</label> 
         <div class="col-sm-10"> 
          <input class="form-control" id="id_password2" name="password2" placeholder="New Password (again)" type="password" /> 
         </div> 

        </div> 
      </div> 
     </div> 
    </div> 

{%endblock body%} 

{% endif %} 

でsettings.py

AUTH_USER_MODEL = 'auth.User' 

:私は今まで何をしたか

コードは明らかにインコですフィールドを追加してリクエストしたとおりに適切に保存する方法が見つからなかったためです。おかげ

答えて

2

は、私は2つの手順でこの問題を解決して、私は私の質問に投稿したコードリファクタリングする巻き込む:

  1. まずステップ(user_tableするカスタムフィールドを作成します):の

ファーストを私はallauthユーザーに関連する問題を処理するCustomUserというプロジェクトに私のアプリケーションを追加しました。

CustomUser/models.py

from __future__ import unicode_literals 

from django.contrib.auth.models import AbstractUser 
from django.db import models 

class CustomUser(AbstractUser): 
    add_your_custom_fields_here 

でsettings.py

INSTALLED_APPS = [ 
    ... 
    'CustomUser.apps.CustomuserConfig', 
] 

AUTH_USER_MODEL = 'CustomUser.CustomUser' 

でCustomUser/apps.py

from __future__ import unicode_literals 

from django.apps import AppConfig 


class CustomuserConfig(AppConfig): 
    name = 'CustomUser' 

は、ユーザテーブルにカスタムフィールドの設定後/ admin.py

from django.contrib import admin 
from .models import CustomUser 

admin.site.register(CustomUser) 

CustomUserに、あなたはこれらのフィールドを追加するためにシェルでmigrateコマンドを実行する必要があります。私の場合、それは動作しませんでした、私は私のデータベースをフラッシュし、再びそれを設定する必要がありました。

  1. 2番目の手順は、新しいユーザーテーブルを使用してupdateformを作成することです。

まず、allauthからUserクラスをオーバーライドする必要があります。 CustomUserフォルダにform.pyを作成するには、

djangoからのインポートフォーム があります。モデルは、あなたのアプリのためのフォームを作成する必要がCustomUser /テンプレート/ profile.htmlにCustomUser

class UpdateUserForm(forms.ModelForm): 
    class Meta: 
     model = CustomUser 
     # Add here the fields you want to be present in the update form 
     fields = ('first_name', 'last_name', 'institution') 

をインポートします。あなただけのプロファイルを追加、

from django.shortcuts import render 
from .forms import UpdateUserForm 
from django.http import HttpResponseRedirect 
from django.views.generic import UpdateView 
from django.core.urlresolvers import reverse_lazy 

def profile(UpdateView): 
    if request.method == 'POST': 
     form = UpdateUserForm(request.POST) 
     if form.is_valid(): 
      return HttpResponseRedirect('/accounts/profile/') 
    else: 
     form = UpdateUserForm() 

    return render(request, 'profile.html', {'form':form}) 

class UserUpdate(UpdateView): 
     form_class = UpdateUserForm 
     template_name = 'profile.html' 
     success_url = reverse_lazy('profile') 

     #get object 
     def get_object(self, queryset=None): 
      return self.request.user 

最後に、あなたのprofile.htmlページの振る舞いつもりな構成だCustomUser/views.py

Update your data <br><br> 

<form action="." method="post"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Submit" /> 
</form> 

:私の場合は、1つのプリミティブを作成しました出来上がりurls.py に.htmlのページ:

from CustomUser import views 

url(r'^accounts/profile/$', views.UserUpdate.as_view() , name='profile'), 

は、それが誰かの役に立てば幸い...おかげ

関連する問題