Подтвердить что ты не робот

Как использовать "Пользователь" в качестве внешнего ключа в Django 1.5

Я создал пользовательскую модель профиля, которая выглядит так:

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

class UserProfile(models.Model):
    user = models.ForeignKey('User', unique=True)
    name = models.CharField(max_length=30)
    occupation = models.CharField(max_length=50)
    city = models.CharField(max_length=30)
    province = models.CharField(max_length=50)
    sex = models.CharField(max_length=1)

Но когда я запускаю manage.py syncdb, я получаю:

myapp.userprofile: "пользователь" имеет отношение к модели User, которая имеет либо не установлены, либо являются абстрактными.

Я также пробовал:

from django.contrib.auth.models import BaseUserManager, AbstractUser

Но это дает ту же ошибку. Где я ошибаюсь и как это исправить?

4b9b3361

Ответ 1

Измените это:

user = models.ForeignKey('User', unique=True)

:

user = models.ForeignKey(User, unique=True)

Ответ 2

Именно в Django 1.5 был введен параметр AUTH_USER_MODEL , позволяющий использовать пользовательскую модель пользователя с системой auth.

Если вы пишете приложение, предназначенное для работы с проектами на Django с 1.5 по 1.10 и более поздние версии, это правильный способ ссылки на пользовательскую модель (которая теперь может отличаться от django.contrib.auth.models.User):

class UserProfile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
  • Подробнее см. docs.

Если вы пишете приложение для повторного использования, поддерживающее Django 1.4, то вам, вероятно, следует определить, какую ссылку использовать, проверяя версию Django, возможно, так:

import django
from django.conf import settings
from django.db import models


def get_user_model_fk_ref():
    if django.VERSION[:2] >= (1, 5):
        return settings.AUTH_USER_MODEL
    else:
        return 'auth.User'


class UserProfile(models.Model):
    user = models.ForeignKey(get_user_model_fk_ref())