如何在django中扩展用户配置文件?

时间:2012-07-24 14:52:20

标签: python django django-models django-admin

我正在尝试使用此处的一些其他问题/答案和网络上的教程来扩展用户配置文件。我正在尝试将UserProfile模型包含在管理员中,以便我可以更改配置文件的详细信息(暂时暂时),但即使在admin.py中包含UserProfile之后它也没有显示,这让我相信我是在这里做错了什么。

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)

1 个答案:

答案 0 :(得分:3)

常见的方法是在UserProfile编辑页面中User内嵌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) 本身用作UserProfile.objects.get(pk=user_id)

user.get_profile()

通过这种方式,您可以节省代理ID的成本,并保持userprofile的id与用户的ID相同。这样就可以{{1}}(当然,{{1}}仍可用)