Подключение к пользовательской модели в Django - PullRequest
8 голосов
/ 15 марта 2012

Быстрый (возможно, глупый) вопрос.Это поток моего сайта: пользователь входит в систему и перенаправляется на пользовательскую страницу администратора.На этой странице администратора они могут создать «Профиль».Я хочу связать созданный ими профиль со своими пользовательскими данными, чтобы 1 пользователь ассоциировался с 1 профилем.

По какой-то причине следующее не работает (просто пытается связать

UserAdmin.Models

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    username = models.ForeignKey(User)
    firstname = models.CharField(max_length=200)
    lastname = models.CharField(max_length=200)
    email = models.EmailField(max_length=200)

    def __unicode__(self):
        return self.username

UserAdmin.Views

def createprofile(request):

    user = User.objects.get(id=1)
    profile = Profile(username=user, firstname='Joe', lastname='Soe', email='Joe@Soe.com')
    profile.save()

Я продолжаю получать: таблица useradmin_profile не имеет столбца с именем username_id

Любые идеи? Признанные.:

Удалил мою базу данных и запустил новый syncdb, изменив на username = models.OneToOneField (Пользователь). Теперь я могу получить Невозможно назначить «u'superuser»:"должен быть экземпляром" Пользователь ".

Ответы [ 2 ]

9 голосов
/ 15 марта 2012

UserAdmin.Models

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User)

    def __unicode__(self):
        return self.user.get_full_name()

UserAdmin.Views

def createprofile(request):

    user_ = User.objects.get(pk=1)
    profile = Profile(user=user_)
    profile.user.first_name = 'Joe'
    profile.user.last_name = 'Soe'
    profile.user.email = 'Joe@Soe.com'
    profile.user.save()
    profile.save()
2 голосов
/ 15 марта 2012

Вы синхронизировали модель профиля до того, как у вас появилось поле username ForeignKey.Django будет создавать таблицы, но не будет изменять их после создания.Вот ответ, перечисляющий ваши варианты: https://stackoverflow.com/a/7693297/990224.

И вам следует подумать о переименовании username в user.

...