Django: ошибка с именем пользователя в моей пользовательской модели пользователя - объект «UserProfile» не имеет атрибута «имя пользователя»

Я новичок в Django, и у меня возникли проблемы с созданием пользовательской модели пользователя. Я выполнил все шаги из документации django. Вот моя модель:

    class UserProfile(models.Model):
user = models.OneToOneField(User)
comment = models.BooleanField()
score = models.IntegerField(null=True)
profilpic = models.ImageField(upload_to="/profilepics")
bio = models.CharField(max_length=140)

Затем я создал несколько пользователей с django-регистрацией. Но когда я захожу в админку и пытаюсь удалить пользователя, которого я создал, или когда я просто пытаюсь нажать на имя пользователя, я получаю эту ошибку:

AttributeError at /admin/auth/user/3/
'UserProfile' object has no attribute 'username'
Exception Value:    
'UserProfile' object has no attribute 'username'
Exception Location: /Users/marc-antoinelacroix/Desktop/Site/sportdub/projet/models.py in   __unicode__, line 14

Поэтому я думаю, что мне нужно создать «имя пользователя» в моей модели UserProfile и связать его с именем пользователя пользователя django, но я понятия не имею, как это сделать...

Любая помощь приветствуется.

Спасибо!


person Marcolac    schedule 11.10.2012    source источник


Ответы (2)


Похоже, вы пытаетесь получить доступ

def __unicode__(self):
    return self.username

но это должно быть

def __unicode__(self):
    return self.user

Вот демо

проект/аккаунт/models.py

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    homepage = models.URLField(verify_exists=False)
    #...

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])

проект/аккаунт/admin.py

from django.contrib import admin
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from account.models import UserProfile

admin.site.unregister(User)

class UserProfileInline(admin.StackedInline):
    model = UserProfile

class UserProfileAdmin(UserAdmin):
    inlines = [UserProfileInline]

admin.site.register(User, UserProfileAdmin)

проект/settings.py

AUTH_PROFILE_MODULE = "account.userprofile"
person Thomas Schwärzl    schedule 11.10.2012
comment
Привет. Я попробовал ваше решение, но оно не работает, я все еще получаю ту же ошибку. По-видимому, это происходит из юникода. Но спасибо! - person Marcolac; 11.10.2012
comment
что находится в строке 14 этого файла? sportdub/projet/models.py in __unicode__, line 14 - person Thomas Schwärzl; 11.10.2012
comment
а 15? ...или не могли бы вы опубликовать весь файл models.py из папки projet? - person Thomas Schwärzl; 11.10.2012
comment
спасибо, я попытался получить доступ к return self.username. Я заменил его на возврат self.user, но знаю, что получаю сообщение об ошибке: TypeError at /admin/auth/user/3/ приведение к Unicode: нужна строка или буфер, пользователь нашел - person Marcolac; 11.10.2012
comment
Хорошо, и я нашел решение этой ошибки здесь: stackoverflow.com/questions/7399283/ - person Marcolac; 11.10.2012
comment
Спасибо большое за помощь! - person Marcolac; 11.10.2012
comment
изменил return self.username на return self.user.username. Теперь это работает как шарм. - person username; 15.11.2012

Нет, вам нужно правильно определить UserProfile.__unicode__(). Ему нужно получить имя пользователя из связанной модели User.

person Ignacio Vazquez-Abrams    schedule 11.10.2012
comment
Итак, на данный момент у меня есть: def unicode__(self): return self.username Как связать это с именем пользователя? Нужно ли использовать имя пользователя в качестве аргумента для __unicode()? - person Marcolac; 11.10.2012