[英]How can I extend a user profile in django?
我正在嘗試使用此處的一些其他問題/答案和網絡上的教程來擴展用戶配置文件。 我正在嘗試將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'),
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)
常見的方法是在User
編輯頁面中,在您的應用程序的admin.py
中內聯UserProfile
,該應用程序位於INSTALLED_APPS
'django.contrib.auth'
之后:
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的成本,並保持userprofile的id與用戶的ID相同。 這使得UserProfile.objects.get(pk=user_id)
(當然仍然可以使用user.get_profile()
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.