1

ここにある他の質問/回答と Web 上のチュートリアルを使用して、ユーザー プロファイルを拡張しようとしています。プロファイルの詳細を変更できるように (今のところ一時的に) 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)
4

1 に答える 1

3

一般的な方法は、 in の後にあるアプリのUserProfilein Useredit ページをインライン化することです。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)

そのようにして、代理 ID のコストを節約し、userprofile の ID をユーザーのものと同じに保つことができます。これにより有効になりますUserProfile.objects.get(pk=user_id)(そしてuser.get_profile()もちろんまだ利用可能です)

于 2012-07-24T15:27:32.863 に答える