लांग जवाब: p
मैं The Missing Manual पोस्ट इस तरह की समस्या के लिए अमूल्य यह Django-प्रोफाइल और Django पंजीकरण प्रणाली की विशेषताओं में से कई के रूप में बताते हैं पाया है।
मैं एकल प्रोफाइल आप AUTH_PROFILE_MODULE
के माध्यम से स्थापित करने के लिए उदाहरण के लिए
#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 पंजीकरण संकेतों का उपयोग करता एक पंजीकरण के बारे में सूचित करने की अनुमति है पर multi table inheritance उपयोग करने का सुझाव चाहते हैं। आपको उस बिंदु पर प्रोफ़ाइल बनाना चाहिए ताकि आपको विश्वास हो कि उपयोगकर्ता.get_profile() पर कॉल हमेशा एक प्रोफ़ाइल लौटाएंगे। संकेत इस्तेमाल किया कोड
#registration.signals.py
user_registered = Signal(providing_args=["user", "request"])
जब कि संकेत आपके द्वारा किए गए अनुरोध के लिए उपयोग किया निपटने जिसका मतलब है है। तो जब आप पंजीकरण फॉर्म पोस्ट करते हैं तो वह फ़ील्ड शामिल होता है जो पहचानता है कि किस प्रकार के उपयोगकर्ता को बनाना है।
#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
आप मॉडल है कि बनाई गई है ऐसा कुछ भी शामिल करना चाहते हैं, जो डिफ़ॉल्ट फ़ील्ड मान में शामिल नहीं है, पंजीकरण समय में आपको स्पष्ट रूप से अनुरोध है कि खींच सकते हैं।
आप एक typ है काम कर रहा है ओ वहाँ: पी – jonasespelita