Как использовать "User" в качестве внешнего ключа в 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
но это дает ту же ошибку. Где я ошибаюсь и как это исправить?
2 ответов
изменить это:
user = models.ForeignKey('User', unique=True)
для этого:
user = models.ForeignKey(User, unique=True)
точно в Джанго 1.5 AUTH_USER_MODEL
задание был представлен, что позволяет использовать пользовательскую модель пользователя с системой авт.
если вы пишете приложение, которое предназначено для работы с проектами на 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())