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