2012-07-24 41 views
1

我正在嘗試使用這裏找到的其他一些問題/答案以及網絡上的教程來擴展用戶配置文件。我試圖在管理員中包含UserProfile模型,以便我可以更改配置文件的詳細信息(暫時暫時),但即使將UserProfile包含在admin.py中,也不會顯示,這使我相信我是在這裏做錯誤的事情。如何在django中擴展用戶配置文件?

model.py
class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    quote = models.CharField('Favorite quote', max_length = 200) 

def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     UserProfile.objects.create(user=instance) 
post_save.connect(create_user_profile, sender=User) 

的URLconf
(r'^accounts/register/$', 'register'), 

視圖view.py該登記用戶

def register(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      new_user = form.save() 
      return HttpResponseRedirect('reserve/templates/index.html') 
    else: 
     form = UserCreationForm() 
    c = {'form': form} 
    return render_to_response("registration/register.html", c, context_instance=RequestContext(request)) 

admin.py
from reserve.models import UserProfile 
from django.contrib import admin 
admin.site.register(UserProfile) 
+0

UserProfile應該可能是與用戶的OneToOne。你的models.py中的縮進是否正確?它看起來不對...... – 2012-07-24 14:57:15

+2

你能包括admin.py – scytale 2012-07-24 14:58:28

+0

@ColinDunklau:'ForeignKey(unique = True)'*是*'OneToOneField'。 – 2012-07-24 15:08:26

回答

3

的常用方法是內聯在User編輯UserProfile頁面,在一個admin.py在你的應用程序,它是後'django.contrib.auth'INSTALLED_APPS

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

class UserProfileInline(admin.TabularInline): 
    model = UserProfile 

class UserWithProfileAdmin(UserAdmin): 
    inlines = [UserProfileInline] 

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

此外,你可以使用ForeignKey本身作爲primary_key

class UserProfile(models.Model): 
    user = models.ForeignKey(User, primary_key=True) 
    quote = models.CharField('Favorite quote', max_length = 200) 

通過這種方式,您可以節省代理id的成本,並保持用戶配置文件的id與用戶的id相同。這使UserProfile.objects.get(pk=user_id)(和user.get_profile()當然仍然可用)

+0

我編輯了admin.py,看起來像上面的代碼,但我仍然無法讓UserProfile顯示在django管理中。 – sharataka 2012-07-25 05:02:17

+0

@sharataka oops我忘記了註冊部分,請參閱編輯。 – okm 2012-07-25 06:36:48

+0

我添加了兩行(取消註冊/註冊),它仍然不可見在django管理員。我在沒有註銷行的情況下嘗試了它,仍然無法運行。我不確定我在哪裏出錯。 – sharataka 2012-07-25 06:52:52