2013-06-29 7 views
2

J'ai deux applications, commonapp et app1.Django: se débarrasser de la dépendance circulaire

Voici commonapp/models.py:

from django.db import models 
#from app1.models import SpecificFields 

# Create your models here. 
class CommonFields(models.Model): 
    a = models.IntegerField(default = 0) 

    class Meta: 
     abstract = True 

class SomeFields(models.Model): 
# a = models.ForeignKey(SpecificFields) 
    a = models.ForeignKey('app1.models.SpecificFields') 

et voici app1/models.py:

from django.db import models 
from commonapp.models import CommonFields 

# Create your models here. 
class SpecificFields(CommonFields): 
    a2 = models.IntegerField(default=0) 

Lorsque je tente d'exécuter le SQL à partir soit app1 ou commonapp, je reçois l'erreur suivante:

$ python manage.py sql commonapp 
CommandError: One or more models did not validate: 
commonapp.somefields: 'a' has a relation with model app1.models.SpecificFields, 
which has either not been installed or is abstract. 

Je réalise que c'est un question d'une dépendance circulaire. D'autres ont suggéré de spécifier le chemin d'accès à une classe en tant que string au lieu de la classe réelle, mais cela ne fonctionne pas. Je ne peux pas non plus spécifier une chaîne comme nom de classe de base dans la classe dérivée.

Une telle dépendance circulaire est-elle possible sans refactoriser mes modèles?

+0

Mettez SomeFields dans app1/models.py – lalo

+0

Je ne veux pas faire cela. Je peux tout mettre dans un fichier models.py, mais je veux éviter de le faire. Le projet est développé par différentes personnes, et chaque personne reçoit une application. En tenant compte de l'organisation du développement et de l'emplacement logique de l'application pour les modèles, cela rend les choses plus propres pour que les modèles soient dans différentes applications. – user2233706

+0

quelle est votre application ?? – lalo

Répondre

6

Importez app1.models entre CommonFields et SomeFields.

+0

Wow, vous devez vous moquer de moi. Je ne peux pas croire que ça a marché. Merci. – user2233706

+0

@ user2233706 vous devriez vraiment essayer d'adresser la dépendance circulaire cependant. Si common est vraiment commun, il ne devrait pas dépendre de quelque chose de spécifique. –

+0

Je comprends. Le problème est que j'ai une autre application qui dépend de 'common', mais pas sur' app1'. – user2233706

Questions connexes