考虑以下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 shell
$ 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.
我在ubuntu 11.04上使用django v1.0.4和pinax 0.7.2,带有sqlite3数据库
以下问题没有多大帮助:
答案 0 :(得分:32)
from django.db import models
from django.contrib.auth.models import User
class Topic(models.Model):
user = models.ForeignKey(User)
'auth.User'
也会起作用。它不是Python的库语法,而是Django ORM的“app.model”语法。但是,如果您正在拼命尝试解决循环依赖,那么您应该只将模型作为字符串传递。如果你有一个循环依赖,你的代码就可以了。
答案 1 :(得分:7)
即使我遇到同样的问题,
错误消息很明确:您尚未安装用户模型。
Add "django.contrib.auth" to INSTALLED_APPS in your settings.py.
那一切......希望它能解决这个问题,对我来说很好。
答案 2 :(得分:1)
我有同样的错误,但在不同的情况下。 我将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'
我在Foo模型中解决了添加Meta的问题:
class Foo(models.Model):
attr1 = ... etc
class Meta():
app_label = 'foo'