Ответ 1
Измените это:
user = models.ForeignKey('User', unique=True)
:
user = models.ForeignKey(User, unique=True)
Я создал пользовательскую модель профиля, которая выглядит так:
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
Но это дает ту же ошибку. Где я ошибаюсь и как это исправить?
Измените это:
user = models.ForeignKey('User', unique=True)
:
user = models.ForeignKey(User, unique=True)
Именно в 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)
Если вы пишете приложение для повторного использования, поддерживающее 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())