2012-04-18 15 views
5

शुभ संध्या,Django में उपयोगकर्ता प्रोफ़ाइल का विस्तार। उपयोगकर्ताओं का व्यवस्थापक निर्माण

मैं वर्तमान में Django के साथ एक साइट बना रहा हूं और मैंने उपयोगकर्ता को उपयोगकर्ता प्रोफ़ाइल के साथ बढ़ाया है। हालांकि मुझे एक छोटी सी समस्या है। यहां मेरी स्थिति है:

  1. मैंने कस्टम फ़ील्ड जोड़ने के लिए उपयोगकर्ता प्रोफ़ाइल को बढ़ाया।
  2. मैंने उपयोगकर्ता व्यवस्थापक मॉडल में मॉडल जोड़ा, इसलिए जब मैं कोई उपयोगकर्ता जोड़ रहा हूं, तो मैं प्रोफ़ाइल बनाने के लिए सीधे फ़ील्ड भर सकता हूं।
  3. अब, यदि मैं इन नए कस्टम उपयोगकर्ता फ़ील्ड में कुछ भी नहीं जोड़ता हूं, तो उपयोगकर्ता में पेज जोड़ें, Django Admin मुझे एक त्रुटि नहीं फेंक देगा कि ये फ़ील्ड शून्य हैं (और वे मानते हैं)
  4. मैं चाहता हूं कि मैं इस उपयोगकर्ता को एडमिन पेज जोड़ें में एक त्रुटि फेंक दूं, ताकि नए उपयोगकर्ता को जोड़ने के दौरान व्यवस्थापक को प्रोफाइल भरना पड़े।
  5. सभी उपयोगकर्ताओं को व्यवस्थापक पैनल में जोड़ा जाएगा।

क्या यह संभव है? आपका बहुत बहुत धन्यवाद!

admin.py

from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin 
from django.contrib.auth.models import User 
from accounts.models import UserProfile 


class UserProfileInline(admin.TabularInline): 
    model = UserProfile 


class UserAdmin(DjangoUserAdmin): 
    inlines = [ UserProfileInline,] 


admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 

में model.py

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    employee_number = models.PositiveIntegerField(unique=True) 

    def __unicode__(self): 
     return 'Number' 

उत्तर

5

डिफ़ॉल्ट रूप से में, खाली इनलाइन की अनुमति दी है और इस प्रकार कोई आगे की जांच के लिए एक खाली फार्म के लिए ले जाया जाएगा। आपको इसे मैन्युअल रूप से ओवरराइड करने की आवश्यकता है:

class UserProfileForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(UserProfileForm, self).__init__(*args, **kwargs) 
     if self.instance.pk is None: 
      self.empty_permitted = False # Here 

    class Meta: 
     model = UserProfile 


class UserProfileInline(admin.TabularInline):   
    model = UserProfile        
    form = UserProfileForm 
+0

अच्छा यह काम करता है! क्या आप थोड़ा और बताते हैं कि कोड क्या करता है? विशेष रूप से कक्षा मेटा: भाग! धन्यवाद साथी – abisson

+0

इसके अलावा, सिंटैक्स क्या होगा यदि मैं अपने फ़ील्ड में से केवल एक खाली होना चाहता था = गलत? और बाकी सच होना चाहिए? – abisson

+0

@abisson 'empty_permitted' एक अनियंत्रित पैरामीटर है जो 'बेसफॉर्म' स्वीकार करता है: जब सबमिट किए गए फॉर्म को प्रारंभिक डेटा से नहीं बदला गया है, और यह 'खाली_मार्मित'' True' है, तो फॉर्म का 'full_clean() 'निष्पादित नहीं होगा कोई और सत्यापन। आप 'django/form/form.py' और' django/form/formets.py' में 'खाली_परमिट' की जांच कर सकते हैं। यदि आप फ़ील्ड में से कोई खाली नहीं होना चाहते हैं, तो आप फॉर्म के लिए 'खाली_परिवृत = सही' सेट करने और अन्य फ़ील्ड के लिए 'blank = True' सेट करने का प्रयास कर सकते हैं। – okm

संबंधित मुद्दे