簡體   English   中英

如何在django中擴展用戶配置文件?

[英]How can I extend a user profile in django?

我正在嘗試使用此處的一些其他問題/答案和網絡上的教程來擴展用戶配置文件。 我正在嘗試將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)

URL配置

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

常見的方法是在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM