2011-09-04 20 views
11

Considere el siguiente modelo DjangoDjango: relación de clave externa a la tabla de usuario no valida

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() 

Este modelo no valida incluso después de la instalación de la mesa auth_user.

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

La declaración anterior es de cáscara 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. 

estoy usando v1.0.4 Django con pinax 0.7.2 en Ubuntu 11.04, con la base de datos sqlite3

hicieron las siguientes preguntas no ayuda mucho:

Respuesta

32
from django.db import models                                
from django.contrib.auth.models import User 

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

'auth.User' hubiera funcionado, también. No es la sintaxis de la biblioteca de Python, es la sintaxis "app.model" de Django ORM. Pero solo debe pasar el modelo como una cadena si está tratando desesperadamente de resolver una dependencia circular. Y si tiene una dependencia circular, su código está eff'd.

+0

Gracias Eso validó el modelo y lo instaló. – Gautam

7

Incluso me enfrentaba misma edición,

El mensaje de error es clara: no ha instalado el modelo del usuario.

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

Todo eso ... Espero que solucione este problema, funcionó bien para mí.

1

Tuve el mismo error, pero en una situación diferente. I dividido el models.py en dos archivos:

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

En foo.py Tenía dos modelos:

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

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

    class Meta(): 
     app_label = 'foo' 

solucioné añadiendo Meta también en modelo de Foo:

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

    class Meta(): 
     app_label = 'foo' 
Cuestiones relacionadas