Genişletilmiş kullanıcı profili oluşturma
Django genişletilmiş İlgili bir model var:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
#other things in that profile
Ve bir signals.py:
from registration.signals import user_registered
from models import UserProfile
from django.contrib.auth.models import User
def createUserProfile(sender, instance, **kwargs):
profile = users.models.UserProfile()
profile.setUser(sender)
profile.save()
user_registered.connect(createUserProfile, sender=User)
Sinyal __init__.py
benim bu sahip olarak kayıtlı olduğundan emin olun
import signals
Bana kaydeden her bir kullanıcı için yeni bir kullanıcı Profili oluşturmanız gerekir, değil mi? Ama olmuyor. Ben her zaman "İlgili eşleşen sorgu" hataları oturum açmaya çalıştığınızda, veritabanı girişi yok demektir. yok olsun
User_registered sinyali veren django-kayıt, kullandığım diyebilirim.
Yapının önemli uygulamalar için bu, Sahip olduğum bir uygulama adı "kullanıcı", var: models.py, signals.py, urls.py ve views.py (ve bazı başka şeyler hangi gerekmiyor mu önemli burada). İlgili sınıf models.py tanımlanır.
Güncelleme: Signals.py değiştirdim:
from django.db.models.signals import post_save
from models import UserProfile
from django.contrib.auth.models import User
def create_profile(sender, **kw):
user = kw["instance"]
if kw["created"]:
profile = UserProfile()
profile.user = user
profile.save()
post_save.connect(create_profile, sender=User)
Ama şimdi anlıyorum "": . İntegrityError
< . p ^"sütun user_id benzersiz değildir"
Edit 2:
Buldum. Bir şekilde sinyali iki defa her şey göründüğü gibi. Bu burada açıklanan geçici çözüm için: http://code.djangoproject.com/wiki/Signals#Helppost_saveseemstobeemittedtwiceforeachsave
Dispatch_uid, şimdi benim signals.py bu gibi bir ekleme yaptım ve çalışıyor:
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from models import UserProfile
from django.db import models
def create_profile(sender, **kw):
user = kw["instance"]
if kw["created"]:
profile = UserProfile(user=user)
profile.save()
post_save.connect(create_profile, sender=User, dispatch_uid="users-profilecreation-signal")
CEVAP
Bu kullanıcı post_save kullanarak uygulayabilirsiniz:
from django.db.models.signals import post_save
from models import UserProfile
from django.contrib.auth.models import User
def create_profile(sender, **kwargs):
user = kwargs["instance"]
if kwargs["created"]:
profile = users.models.UserProfile()
profile.setUser(sender)
profile.save()
post_save.connect(create_profile, sender=User)
Düzenleme:
Test edilmiş ve çalışan başka bir olası çözüm, (sitemde kullanıyorum):
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
def create_profile(sender, **kwargs):
user = kwargs["instance"]
if kwargs["created"]:
up = UserProfile(user=user, stuff=1, thing=2)
up.save()
post_save.connect(create_profile, sender=User)
HATA 1396 (HY000): İşlem KULLANICI �...
Kullanıcı alan sistem eksik.ne zaman M...
Raylar üzerinde Vasiyetle yönetici kul...
Golang uygulama otomatik sürüm oluştur...
Ne kadar kullanıcı denetimleri ASP.NET...