1

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

模型.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)

网址配置

(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))

管理员.py

from reserve.models import UserProfile
from django.contrib import admin
admin.site.register(UserProfile)
4

1 回答 1

3

常见的方法是内联编辑页面,在UserProfile你的应用程序中,在之后:Useradmin.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 与用户相同。这启用UserProfile.objects.get(pk=user_id)user.get_profile()当然仍然可用)

于 2012-07-24T15:27:32.863 回答