2011-09-04 18 views
11

Rozważmy następujący Django modelowiDjango: relacja klucza obcego z tabeli użytkownika nie sprawdza

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

Ten model nie sprawdza nawet po zainstalowaniu tabelę auth_user.

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

Powyższe stwierdzenie jest z django-admin skorupy

$ 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. 

Używam django v1.0.4 z pinax 0.7.2 na Ubuntu 11.04, z sqlite3 bazy

następujące pytania zrobił nie pomogło:

Odpowiedz

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

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

'auth.User' będzie pracował też. Nie jest to składnia biblioteki Pythona, jest to składnia "app.model" Django ORM. Ale musisz tylko przekazać model jako ciąg, jeśli desperacko próbujesz rozwiązać zależność cykliczną. A jeśli masz zależność cykliczną, twój kod jest eff'd.

+0

Thanks To sprawdziło model i zainstalowało go. – Gautam

7

Nawet ja w obliczu tego samego problemu,

Komunikat o błędzie jest jasne: nie masz zainstalowanego modelu użytkownika.

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

To wszystko .. Miej nadzieję, że rozwiąże to zagadnienie, zadziałało dobrze dla mnie.

1

Miałem ten sam błąd, ale w innej sytuacji. I podzielony na models.py w dwóch plikach:

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

W foo.py miałem dwa modele:

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

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

    class Meta(): 
     app_label = 'foo' 

rozwiązałem dodając Meta również w modelu Foo:

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

    class Meta(): 
     app_label = 'foo' 
Powiązane problemy