Burada, django-kaydı sinyalleri kullanarak yeni alanlarla genişletmek için bir çözüm buldum. İşte bağlantı: http://dmitko.ru/?p=546.
Genişletilmiş profil modeli oluşturdum, genişletilmiş form, gerekli seçenekleri ekledim, tanımlanmış URL'ler ve uygun form görüntülenir ancak sadece normal Kullanıcı (auth modülünden) oluşturulur. Bu neden oluyor?Sinyalleri kullanarak django kaydını genişletme
account.models: Diğer modeller aynı alanlarını kullanacaktır olarak
from django.db import models
from django.contrib.auth.models import User
from registration.signals import user_registered
import hashlib
class InheritedProfile(models.Model):
first_name = models.CharField("Name", max_length=50, blank=True, null=True)
last_name = models.CharField("Last name", max_length=50, blank=True, null=True)
pid = models.CharField("PESEL", max_length=11, blank=True, null=True)
street = models.CharField("Street", max_length=50, blank=True, null=True)
number = models.CharField("Flat/house number", max_length=10, blank=True, null=True)
code = models.CharField("Zip ", max_length=6, blank=True, null=True)
city = models.CharField("City", max_length=50, blank=True, null=True)
class Meta:
abstract=True
class UserProfile(InheritedProfile, User):
def upload_path(self, field_attname):
filename = hashlib.md5(field_attname).hexdigest()[:4] + "_" + field_attname
return "uploads/users/%s" % (filename,)
image = models.ImageField(upload_to=upload_path, verbose_name="Image", blank=True, null=True)
def user_created(sender, user, request, **kwargs):
form = ExtendedRegistrationForm(request.POST)
extended_user = UserProfile(user=user)
extended_user.is_active = False
extended_user.first_name = form.extended_user['first_name']
extended_user.last_name = form.extended_user['last_name']
extended_user.pid = form.extended_user['pid']
extended_user.image = form.extended_user['image']
extended_user.street = form.extended_user['street']
extended_user.number = form.extended_user['number']
extended_user.code = form.extended_user['code']
extended_user.city = form.extended_user['city']
extended_user.save()
user_registered.connect(user_created)
soyut olmasını InheritedProfile gerekir.
AUTH_PROFILE_MODULE = 'account.UserProfile'
ACCOUNT_ACTIVATION_DAYS = 7
nihayet bu kayıt sinyali gibi görünüyor::
from django.dispatch import Signal
# A new user has registered.
user_registered = Signal(providing_args=["user", "request"])
DÜZENLEME: girinti
account.forms
from django import forms
#import strings
from registration.forms import RegistrationForm
from models import UserProfile, InheritedProfile
class ExtendedRegistrationForm(RegistrationForm):
first_name = forms.CharField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)), label="First name")
last_name = forms.CharField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)), label="Last name")
pid = forms.RegexField(regex=r'^\d{11}', max_length=11 ,widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)))
image = forms.ImageField(label="Image",)
street = forms.CharField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=50)), label="Street")
number = forms.CharField(widget=forms.TextInput, label="House/flat number")
code = forms.RegexField(regex=r'^\d{2}[-]\d{3}', max_length=6, widget=forms.TextInput(attrs=attrs_dict), label="Postal code")
city = forms.CharField(widget=forms.TextInput, label="City")
ve seçenekleri ayarlarına eklenir kullanıcı tarafından oluşturulan cha
"
İstisna Konum SMTPServerDisconnected: Ben
user_registered.connect(user_created)
Ben başlamıştı Şimdi
user_registered.connect(user_created, sender=UserProfile)
değişen denedim kadar hiçbir şey değişmelerin /bin/python-2.6.1/lib/ python2.6/smtplib.py in getreply, satır 340 "satır sayısı"
Traceback:
File "/home/fandrive/site-packages/django/core/handlers/base.py" in get_response
92. response = callback(request, *callback_args, **callback_kwargs)
File "/home/fandrive/registration/views.py" in register
47. new_user = backend.register(request, **form.cleaned_data)
File "/home/fandrive/registration/backends/default/__init__.py" in register
20. password, site)
File "/home/fandrive/site-packages/django/db/transaction.py" in _commit_on_success
240. res = func(*args, **kw)
File "/home/fandrive/registration/models.py" in create_inactive_user
80. registration_profile.send_activation_email(site)
File "/home/fandrive/registration/models.py" in send_activation_email
256. self.user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)
File "/home/fandrive/site-packages/django/contrib/auth/models.py" in email_user
271. send_mail(subject, message, from_email, [self.email])
File "/home/fandrive/site-packages/django/core/mail.py" in send_mail
390. connection=connection).send()
File "/home/fandrive/site-packages/django/core/mail.py" in send
266. return self.get_connection(fail_silently).send_messages([self])
File "/home/fandrive/site-packages/django/core/mail.py" in send_messages
172. sent = self._send(message)
File "/home/fandrive/site-packages/django/core/mail.py" in _send
186. email_message.message().as_string())
File "/bin/python-2.6.1/lib/python2.6/smtplib.py" in sendmail
708. self.rset()
File "/bin/python-2.6.1/lib/python2.6/smtplib.py" in rset
438. return self.docmd("rset")
File "/bin/python-2.6.1/lib/python2.6/smtplib.py" in docmd
363. return self.getreply()
File "/bin/python-2.6.1/lib/python2.6/smtplib.py" in getreply
340. raise SMTPServerDisconnected("Connection unexpectedly closed")
Exception Type: SMTPServerDisconnected at /user/register/
Exception Value: Connection unexpectedly closed
Şu anda kukla e-posta arka uç kullanıyorum bile. Kayıt sırasında postalama işlevinin gönderilmesiyle ilgili yorum yapmak bu sorunu çözdü ancak hala genişletilmiş kullanıcım oluşturulmadı.
hayır, dikkatli bir şekilde bakın. Benim işlevim aynı şekilde bağlanır. Sadece user_registered sinyalinin kodunu verdim. Burada kullanıcı ile ilişkisinden miras ilişkisine geçtim: http://stackoverflow.com/questions/3124052/models-does-not-create-tables-when-synched ve bu işlevin kodu bir şekilde benim tablolarımın oluşturulmasını engelliyor . Bu işlevi nereye koydunuz? Ve bu sinyale bağlanırken gönderen sağlamaz mı? – crivateos
Bu işlevi farklı bir dosyaya taşıdım. Şimdi tablolarım oluşturuldu ancak hala genişletilmiş kullanıcı profili oluşturulmuyor. – crivateos
Bu kod, urls.py ile aynı düzeydeki 'regbackend.py' dosyasındadır ve eşleşme desenlerinden hemen önce urls.py dosyasında içe aktarılır. Bu kod doğrudan regbackend'ten kopyalanır.py (gönderen sağlanır) ve bu dosya başka bir şey içermiyor. – dmitko