Uzun cevap: p ben django-profil ve django-kayıt sistemlerinin özelliklerinin çoğunu açıkladığı gibi sorunun bu tür The Missing Manual sonrası çok değerli buldum
.
Sana
#models.py
class Profile(models.Model):
#add any common fields here (first_name, last_name and email come from User)
#perhaps add is_student or is_teacher properites here
@property
def is_student(self):
try:
self.student
return True
except Student.DoesNotExist:
return False
class Teacher(Profile):
#teacher fields
class Student(Profile):
#student fields
django-kayıt bir kayıt bildirmek üzere sinyalleri kullanır Örneğin AUTH_PROFILE_MODULE
aracılığıyla ayarlamak için izin konum tek profilde multi table inheritance kullanmanızı öneririz. Bu noktada profili oluşturmalısınız, böylece user.get_profile() öğesinin çağrısının her zaman bir profil döndüreceğinden eminsiniz. kullanılan sinyal kodu Yaptığınız istekte erişiminiz olduğundan sinyal işlerken demektir
#registration.signals.py
user_registered = Signal(providing_args=["user", "request"])
olduğunu. Bu nedenle, POST kaydolduktan sonra kayıt formunu, hangi kullanıcı türünün oluşturulacağını tanımlayan bir alan içerir. Eğer oluşturulan modele şey eklemek istiyorsanız
#signals.py (in your project)
user_registered.connect(create_profile)
def create_profile(sender, instance, request, **kwargs):
from myapp.models import Profile, Teacher, Student
try:
user_type = request.POST['usertype'].lower()
if user_type == "teacher": #user .lower for case insensitive comparison
Teacher(user = instance).save()
elif user_type == "student":
Student(user = instance).save()
else:
Profile(user = instance).save() #Default create - might want to raise error instead
except KeyError:
Profile(user = instance).save() #Default create just a profile
, bu tabii ki istek o indirebiliriz kayıt sırasında, varsayılan alan değerleri kapsamında değildir.
çalışıyor görünüyor o var: P – jonasespelita