Как использовать "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())