2010-12-30 25 views
10

Profilim hakkında bilgi görüntülemek için Django Yönetici arayüzünü almaya çalışıyorum. Tüm kullanıcılarımı görüntüler, ancak profil bilgisi içermez. İşe nasıl başlayacağından emin değilim. Django - Kullanıcı, KullanıcıProfil ve Yönetici

Ben hızlı google arama sonra bu kodu bulundu:

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) 

Ancak, bu işe yaradığını düşünmüyorum. Yönetici sayfasına giriş yaptığımda Kullanıcılar, Gruplar ve Siteleri görüyorum. Kullanıcılar'ı tıklıyorum ve tüm Kullanıcılarımın bir listesini görüyorum, ancak herhangi bir profilin belirtisi yok. Bir kullanıcıya tıklamak o kullanıcı hakkında bilgi gösterir, ancak hala profil bilgisi içermez.

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) 

Ve kayıt kodu:

o yardımcı olacaktır, burada benim modelim beyanıdır

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

Yönetici kodunu yeni bir uygulamanın paketine "admin.py" olarak koydunuz ve bunu "INSTALLED_APPS" öğesine eklediniz mi? –

+0

Yöneticinin kodu admin.py "auth" uygulamamın içinde. auth INSTALLED_APPS içinde. Ayrıca, Yetkilendirme Profil Modülümü doğru şekilde ayarlıyorum. – JPC

+2

auth, bir anlaşmazlık yaşayacağınız için kötü bir ad gibi görünüyor. –

cevap

25

göremiyorum tam olarak sorun yok, ama burada biraz daha basit bir örnek ne olduğunu Çalışmaları biliyorum. Bunu koymak çalışan admin.py. Satırınıza sondaki bir virgül eklemeyi deneyin - bazı şeyler onsuz kırılır.

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

Bu, aynı kod, bir virgül hariç – JPC

+1

@JPC Hangi önemli değil, biliyorum. Admin.py’inizin teslim alındığından emin misiniz? –

+0

Bence işe yaradı. Bir kullanıcıyı tıkladığımda profili şimdi görebilirim! Vay canına. Bir virgül – JPC

6

Bu tam Sorunuza bir cevap değil ama, Django Admin documentation göre, kendi kullanıcı "tablosundaki" in Kullanıcıprofili bilgileri görüntüleyebilir. Ve onu aranabilir hale getirebilirsiniz. Bu (C. Alan Zoppa gelen modifiye cevap) gibi bir şey olur

: profil sınıfı artık UserProfile çağrılıp çağrılmadığını Gerçi arama ile bir sorun olabilir

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',) 

.

3

Eksik virgül önemli değil. Sorun şu ki, yeni bir admin.py eklediniz, ancak geliştirme sunucusu bunu tanıyamadı. Geliştirme sunucusunu yeniden başlatırsanız, yeni dosyayı görür.

+0

içinden doğru cevap budur – mgalgs