2013-07-28 15 views
10

django-पंजीकरण 1.0 के लिए डीजेंगो-पंजीकरण 1.0 फॉर्म सबक्लासिंग django 1.5 कस्टम उपयोगकर्ता मॉडल के लिए समर्थन है। डीजेंगो-पंजीकरण दस्तावेज में केवल निम्नलिखित एफएक्यू आइटम हैं:django 1.5 कस्टम उपयोगकर्ता मॉडल

मैं Django 1.5 और एक कस्टम उपयोगकर्ता मॉडल का उपयोग कर रहा हूं; मैं यह काम कैसे करूं?

हालांकि Django पंजीकरण के साथ आपूर्ति की दोनों मान Django के डिफ़ॉल्ट उपयोगकर्ता मॉडल दो में निर्मित बैकेंड, आधार दृश्य कक्षाएं जानबूझकर उपयोगकर्ता के मॉडल-नास्तिक हैं। बस उन्हें उपclass, और अपने कस्टम उपयोगकर्ता मॉडल के लिए तर्क लागू करें।

मुझे यकीन नहीं है कि मुझे कौन से विचारों को उपclass करने की आवश्यकता है और उनमें क्या जाना चाहिए। मैंने यह भी देखा है कि ProfileManager डीजेंगो-पंजीकरण में अभी भी एक अलग उपयोगकर्ता नाम फ़ील्ड मानता है।

मेरी विशिष्ट मामले में, मुझे 'उपयोगकर्ता नाम' फ़ील्ड हटा दिया है, एक 'display_name' जोड़ा, और बना दिया 'ईमेल' की पहचान क्षेत्र:

class MyUser(AbstractBaseUser, PermissionsMixin): 
    email = models.EmailField(
     verbose_name="Email Address", 
     max_length=384, 
     unique=True, 
     db_index=True,) 
    display_name = models.CharField(max_length=128, blank=True) 
    date_joined = models.DateTimeField(default=timezone.now) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 

    objects = MyUserManager() 

    USERNAME_FIELD = 'email' 

    def get_full_name(self): 
     return self.email 

    def get_short_name(self): 
     return self.email 

    def __unicode__(self): 
     return self.email 

    def has_perm(self, perm, obj=None): 
     return True 

    def has_module_perms(self, app_label): 
     return True 

    @property 
    def is_staff(self): 
     return self.is_admin 

किसी भी Django पंजीकरण कक्षाएं, उपवर्गीकरण बिना पंजीकरण फॉर्म का डिफ़ॉल्ट प्रतिपादन User से MyUser के बजाय फ़ील्ड में खींचता है।

मैंने निम्नलिखित SO धागा django-registration app and Django 1.5 custom user model देखा है, लेकिन इससे मदद नहीं मिली।

अद्यतन

मैंने देखा है कि RegistrationForm 'उपयोगकर्ता नाम' फ़ील्ड से hardcoded है। एफएक्यू केवल बैकएंड को उप-वर्गीकरण का उल्लेख करता है, इसलिए मुझे यकीन नहीं है कि इरादा क्या है। क्या मुझे फॉर्म को भी उप-वर्ग करना चाहिए?

+1

कृपया इस के लिए प्रतिबद्ध एक नजर है - https://bitbucket.org/LinnTroll/django-registration-1.5/commits/c71d5b8e273551cffdfc7869545430e3 !! आपको इसके लिए 'डिफ़ॉल्ट बैकएंड', 'पंजीकरणफॉर्मफ्रूउसर मॉडल' के साथ-साथ 'पंजीकरण प्रबंधक' को उप-वर्गीकृत करने की आवश्यकता है। – pankaj28843

+0

क्या आपने AUTH_USER_MODEL को सेटिंग.py में नए कस्टम उपयोगकर्ता मॉडल में बदल दिया है? – Wei

+0

आप क्या कर रहे हैं? मैं बस इसे 'हैंडल' टेम्पलेट टैग का उपयोग करने के बजाय पंजीकरण फ़ॉर्म में फ़ील्ड को स्पष्ट रूप से परिभाषित करने के बारे में सोच रहा हूं। आदर्श नहीं है, लेकिन मुझे लगता है कि यह सबसे आसान विकल्प हो सकता है। – bnjmn

उत्तर

1

कुछ हिस्सों सबसे निश्चित रूप से अभी तक 1.5 संगत Django नहीं हैं: https://bitbucket.org/ubernostrum/django-registration/src/8f242e35ef7c004e035e54b4bb093c32bf77c29f/registration/forms.py?at=default#cl-48

class RegistrationForm(forms.Form): 
    # ... 

    def clean_username(self): 
     # ... 
     # The line below needs fixing 
     existing = User.objects.filter(username__iexact=self.cleaned_data['username']) 
     if existing.exists(): 
      raise forms.ValidationError(_("A user with that username already exists.")) 
     else: 
      return self.cleaned_data['username'] 

तो जब तक उन तरीकों से बदल रहे हैं और/या आप उन्हें उपवर्ग, यह अभी तक काम नहीं करेगा।

अपने विशिष्ट मामले के लिए यह पंजीकरण फार्म चाल करना चाहिए:

from registration import forms as registration_forms 
from django.contrib import auth 

class RegistrationForm(registration_forms.RegistrationForm): 
    def clean_username(self): 
     ''' 
     Validate that the username is alphanumeric and is not already 
     in use. 
     ''' 
     User = auth.get_user_model() 
     existing = User.objects.filter(display_name__iexact=self.cleaned_data['username']) 
     if existing.exists(): 
      raise forms.ValidationError(_("A user with that name already exists.")) 
     else: 
      return self.cleaned_data['username'] 

अपने मॉडल पर कोई कस्टम गुण के अलावा:

class MyUser(AbstractBaseUser, PermissionsMixin): 
    # ... 

    def get_username(self): 
     return self.display_name 

    def set_username(self, username): 
     self.display_name = username 

    def del_username(self): 
     del self.display_name 

    username = property(get_username, set_username, del_username) 
संबंधित मुद्दे