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?
Mettez SomeFields dans app1/models.py – lalo
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
quelle est votre application ?? – lalo