2012-03-06 10 views
1

okもう一度聞いてきました。django登録とデータの保存

今回私は、バックエンドでdjango-registrationを使用しています。

なぜ私のregbackend.pyが他の多くの関数を持っているのか不思議であれば、サーバはそれらのメソッドについて不平を言っていましたので、そこにコピーして貼り付けました。

しかし、バックエンドがデータベースに保存するsave関数をどのように呼び出すのかを知りたいだけです。

私はそれがここで呼び出されると思ったので、ここにsaveメソッドを含めました。それ以外の場合は、すでに私のforms.pyにあります。

私は実際にピンナップとジャンゴのプロファイルを見てみましたが、それは私のプロジェクトの全体的な見直しを必要とするでしょう。

ありがとうございました。

forms.py:

from django import forms 
from r2.models import Keyword 
from r2.models import UserProfile 
from registration.forms import RegistrationForm 
from registration.models import RegistrationProfile 
from django.utils.translation import ugettext_lazy as _ 
from registration.forms import RegistrationForm, attrs_dict 

class ProjectSpecificRegistrationForm(RegistrationForm): 
    keywords = forms.ModelChoiceField(queryset=Keyword.objects.all()) 
    first_name =forms.CharField(widget=forms.TextInput(attrs=attrs_dict),label=_(u'First Name')) 
    last_name =forms.CharField(widget=forms.TextInput(attrs=attrs_dict),label=_(u'Last Name')) 

    def save(self, profile_callback=None): 
     new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'], 
     password=self.cleaned_data['password1'], 
     email=self.cleaned_data['email']) 
    new_profile = UserProfile(user=new_user,username=self.cleaned_data['username'], keywords_subscribed=self.cleaned_data['keywords'],first_name=self.cleaned_data['first_name'],last_name=self.cleaned_data['last_name']) 

     new_profile.save() 
     return new_user() 

Urls.py:CRへ

from django.conf import settings 
from django.contrib.sites.models import RequestSite 
from django.contrib.sites.models import Site 
from django.contrib.auth.models import User 
from registration import signals 
from registration.forms import RegistrationForm 
from registration.models import RegistrationProfile 
from r2.forms import ProjectSpecificRegistrationForm 
from r2.models import * 

class RegBackend(object): 

    def register(self, request, **kwargs): 

     username, email, password = kwargs['username'], kwargs['email'], kwargs['password1'] 
     if Site._meta.installed: 
      site = Site.objects.get_current() 
     else: 
      site = RequestSite(request) 
     new_user = RegistrationProfile.objects.create_inactive_user(username, email, 
                    password, site) 
    user = User.objects.get(username=new_user.username) 
     user.first_name = kwargs['first_name'] 
     user.last_name = kwargs['last_name'] 
    user.keywords = kwargs['keywords'] 

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

    def save(self, profile_callback=None): 
     print('Came in') 
     new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'], 
     password=self.cleaned_data['password1'], 
     email=self.cleaned_data['email']) 
    new_profile = UserProfile(user=new_user,username=self.cleaned_data['username'], keywords_subscribed=self.cleaned_data['keywords'],first_name=self.cleaned_data['first_name'],last_name=self.cleaned_data['last_name']) 

     new_profile.save() 
     return new_user() 

    def registration_allowed(self, request): 
     return getattr(settings, 'REGISTRATION_OPEN', True) 

    def post_registration_redirect(self, request, user): 
     return ('registration_complete',(), {}) 
+0

意図が私には間違っているようです。 – DrTyrsa

答えて

1

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

ここでは私のregbackend.pyです新しいユーザーをeateするには、バックエンドの方法registerを使用する必要があります。サーバーは、私はちょうどコピーしてそこに貼り付け、それらの方法に文句た

backend = RegBackend() 
user = backend.register(request, **your_kwargs) 

あなたはそこrequestを渡す必要がありますので、それは(requestへのアクセス権を持っているか、他の場所)ビューから呼び出されなければなりません。

だけ(から)継承を使用

と登録バックエンドにはない(とはならない)saveメソッドを持って、何かをコピーする必要はありません。

+0

ああ意味があります。さて、私はそれを試してみましょう! DrTyrsaに感謝します! –

+0

実際には私のバックエンドの登録メソッドを既に使用しています。私はいくつかの行を印刷し、コンソールはそれを印刷します。私がすることができないことは、自分のデータベースに保存することです@DrTyrsa –

+0

@StanwinSiowあなたの意図を確認してください。また、 'keywords'メソッドを' register'メソッドで追加する場合、 'save'メソッドは呼び出されません。 – DrTyrsa

関連する問題