2010-12-30 17 views
10

मैं अपनी प्रोफ़ाइल के बारे में जानकारी प्रदर्शित करने के लिए Django Admin इंटरफ़ेस प्राप्त करने का प्रयास कर रहा हूं। यह मेरे सभी उपयोगकर्ताओं को प्रदर्शित करता है लेकिन कोई प्रोफाइल जानकारी नहीं। मुझे पूरा यकीन नहीं है कि इसे कैसे काम पर लाया जाए।Django - उपयोगकर्ता, उपयोगकर्ता प्रोफाइल, और व्यवस्थापक

मैं एक त्वरित गूगल खोज के बाद इस कोड को मिला:

from auth.models import UserProfile 
from django.contrib import admin 
from django.contrib.auth.models import User 
from django.contrib.auth.admin import UserAdmin 

admin.site.unregister(User) 

class UserProfileInline(admin.StackedInline): 
    model = UserProfile 

class UserProfileAdmin(UserAdmin): 
    inlines = [UserProfileInline] 

admin.site.register(User, UserProfileAdmin) 

हालांकि, मुझे नहीं लगता कि यह है कि यह काम किया। जब मैं व्यवस्थापक पृष्ठ में लॉग इन करता हूं, तो मैं उपयोगकर्ता, समूह और साइटें देखता हूं। मैं उपयोगकर्ताओं को क्लिक करता हूं और मैं अपने सभी उपयोगकर्ताओं की एक सूची देखता हूं, लेकिन किसी भी प्रोफ़ाइल का कोई संकेत नहीं। किसी उपयोगकर्ता पर क्लिक करने से मुझे उस उपयोगकर्ता के बारे में जानकारी मिलती है, लेकिन फिर भी कोई प्रोफ़ाइल जानकारी नहीं होती है।

from django.db import models 
from django.contrib.auth.models import User 

class UserProfile(models.Model): 
    company = models.CharField(max_length=30) 
    user = models.ForeignKey(User, unique=True) 

और मेरी पंजीकरण कोड:

यदि यह मदद मिलेगी, यहाँ अपने मॉडल घोषणा है

def register(request): 
    if request.method == 'POST': 
     uf = UserForm(request.POST) 
     upf = UserProfileForm(request.POST) 
     if uf.is_valid() and upf.is_valid(): 
      user = uf.save() 
      userprofile = upf.save(commit=False)#need to get the user profile object first 
      userprofile.user = user #then set the user to user 
      userprofile.save() #then save to the database 
      return HttpResponseRedirect('/auth/login/') 
    else: 
     uf = UserForm() 
     upf = UserProfileForm() 
    return render_to_response('register.html', dict(userform=uf,userprofileform=upf),context_instance=RequestContext(request)) 
+0

क्या आपने व्यवस्थापक के लिए कोड को 'admin.py' में एक नए ऐप के पैकेज में रखा था और इसे' INSTALLED_APPS' 'में जोड़ा था? –

+0

व्यवस्थापक के लिए कोड मेरे "auth" एप्लिकेशन के अंदर admin.py में है। ऑथ INSTALLED_APPS में है। मैंने अपना ऑथ प्रोफाइल मॉड्यूल भी सही ढंग से सेट किया है। – JPC

+2

auth एक बुरे नाम की तरह लगता है क्योंकि आप एक संघर्ष कर सकते हैं। –

उत्तर

25

मैं नहीं देख सकते हैं कि वास्तव में क्या गलत है, लेकिन यहाँ एक से थोड़ा सरल उदाहरण है कि मुझे काम पता है। यह किसी भी काम कर रहा है admin.py। अपनी इनलाइन में पिछली कॉमा जोड़ने का प्रयास करें - कुछ चीजें इसके बिना तोड़ती हैं।

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

admin.site.unregister(User) 

class UserProfileInline(admin.StackedInline): 
    model = UserProfile 

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

admin.site.register(User, UserProfileAdmin) 
+0

यह एक ही कोड है, कोमा – JPC

+1

@JPC को छोड़कर, मुझे कोई फर्क नहीं पड़ता, मुझे पता है। क्या आप वाकई अपना admin.py उठा रहे हैं? –

+0

मुझे लगता है कि यह काम किया। जब मैं किसी उपयोगकर्ता पर क्लिक करता हूं तो अब प्रोफ़ाइल देख सकता हूं! वाह धन्यवाद। एक अल्पविराम – JPC

6

यह ठीक आपके प्रश्न का उत्तर नहीं है, लेकिन, Django Admin documentation के अनुसार, आपको जानकारी UserProfile से अपने उपयोगकर्ता "तालिका" में प्रदर्शित कर सकते हैं। और आप इसे खोजने योग्य बना सकते हैं।

कि इस (सी एलन Zoppa से संशोधित जवाब) कुछ ऐसा दिखाई देगा:

class UserProfileAdmin(UserAdmin): 
    inlines = [ UserProfileInline, ] 
    def company(self, obj): 
     try: 
      return obj.get_profile().company 
     except UserProfile.DoesNotExist: 
      return '' 
    list_display = UserAdmin.list_display + ('company',) 
    search_fields = UserAdmin.search_fields + ('userprofile__company',) 

आप अपने प्रोफ़ाइल वर्ग नहीं रह गया है UserProfile कहा जाता है यदि हालांकि खोज के साथ एक मुद्दा हो सकता है।

3

गायब कॉमा से कोई फर्क नहीं पड़ता। मुझे संदेह है कि समस्या यह है कि आपने एक नया admin.py जोड़ा लेकिन विकास सर्वर इसे पहचान नहीं पाया। यदि आप विकास सर्वर को पुनरारंभ करते हैं, तो यह नई फ़ाइल देखेंगे।

+0

यह सही उत्तर है – mgalgs

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