Django: отношение внешнего ключа с таблицей пользователей не проверяется - PullRequest
11 голосов
/ 04 сентября 2011

Рассмотрим следующую модель django

from django.db import models                                                                                                                             
from django.contrib import auth
class Topic(models.Model):
   user = models.ForeignKey('auth.models.User')                                                                                                          
   name = models.CharField(max_length = NameMaxLength , unique = True)
   version_number = models.IntegerField(default = 0)
   created_at = models.DateTimeField(auto_now_add  = True)
   modified_at = models.DateTimeField(auto_now = True)
   update_frequency = models.IntegerField()

Эта модель не проверяется даже после установки таблицы auth_user.

In [3]: auth.models.User.objects.all()
Out[3]: [<User: admin>]

Вышеприведенный оператор взят из оболочки django-admin

$ python manage.py syncdb
Error: One or more models did not validate:
topic: 'user' has a relation with model auth.models.User, which has either not
been installed or is abstract.

Я использую django v1.0.4 с pinax 0.7.2 на Ubuntu 11.04, с базой данных sqlite3

Следующие вопросы мало помогли:

Ответы [ 3 ]

32 голосов
/ 04 сентября 2011
from django.db import models                                                                                                                             
from django.contrib.auth.models import User

class Topic(models.Model):
    user = models.ForeignKey(User) 

'auth.User' тоже бы сработало.Это не синтаксис библиотеки Python, а синтаксис "app.model" в Django ORM.Но вы должны передавать модель только как строку, если вы отчаянно пытаетесь решить круговую зависимость.И если у вас круговая зависимость, ваш код эффективен.

7 голосов
/ 03 ноября 2012

Даже я столкнулся с той же проблемой,

Сообщение об ошибке ясно: вы не установили модель пользователя.

Add "django.contrib.auth" to INSTALLED_APPS in your settings.py.

Вот и все .. Надеюсь, это решит эту проблему, у меня сработало нормально.

1 голос
/ 31 октября 2013

У меня была такая же ошибка, но в другой ситуации.Я разделил models.py на два файла:

myapp/
    models/
        __init__.py
        foo.py
        bar.py

В foo.py у меня было две модели:

class Foo(models.Model):
    attr1 = ... etc

class FooBar(models.Model):
    other = ... etc
    foo = models.ForeignKey(Foo)

    class Meta():
        app_label = 'foo'

Я решил добавить Meta также в модель Foo:

class Foo(models.Model):
    attr1 = ... etc

    class Meta():
        app_label = 'foo'
...