2010-12-30 9 views
10

私のプロファイルに関する情報を表示するためにDjango Adminインターフェイスを取得しようとしています。すべてのユーザーは表示されますが、プロファイル情報は表示されません。私はそれを働かせる方法がかなり分かりません。Django - User、UserProfile、and Admin

私は、迅速なGoogle検索の後に、このコードを見つけました:

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のコードを新しいパッケージの 'admin.py'に入れて、' INSTALLED_APPS'に追加しましたか? –

+0

adminのコードは、私の "auth"アプリケーション内のadmin.pyにあります。 authは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

私はそれが働いたと思います。ユーザーをクリックするとプロファイルが表示されます。うわー、ありがとう。 Aコンマ – JPC

6

これはまさにあなたの質問への答えではないが、Django Admin documentationによると、あなたはあなたのユーザー「表」でのUserProfileからの情報を表示することができます。そして、検索可能にすることができます。この(C.アランZoppaからの変更の回答)のようになります

:プロフィールのクラスはもはやUserProfileと呼ばれている場合はしかし、検索して問題を持っていないかもしれません

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

紛失したカンマは問題ではありません。私は問題が新しいadmin.pyを追加したが、開発サーバーがそれを認識しなかったと思う。開発サーバーを再起動すると、新しいファイルが表示されます。

+0

これは正しい答えです – mgalgs