Tengo dos aplicaciones llamadas collection , accounts . Ambas aplicaciones tienen modelos definidos. Estoy importando un ReporterProfile modelo de la aplicación de accounts a collection . Del mismo modo, un Report modelo de la collection de aplicaciones a las accounts .
El modelo de Report de la aplicación de collection se llama en un método de clase de modelo en la aplicación de accounts como esta:
from collection.models import Report class ReporterProfile(models.Model): .... def published_articles_number(self): num = Report.objects.filter(reporterprofile=self.id).count() return num Del mismo modo, estoy importando los modelos ReporterProfile y User de la aplicación de accounts al modelo de aplicación de collection de esta manera:
from accounts.models import ReporterProfile, User from <project_name> import settings class Report(models.Model): reporterprofile = models.ForeignKey(ReporterProfile, on_delete=models.CASCADE, verbose_name="Report Author") ... class Comment(models.Model): report = models.ForeignKey(Report, on_delete=models.CASCADE, related_name='comments') user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name="Comment by") ...Al ejecutar el servidor o realizar migraciones, aparece el error:
Archivo "F:\project_name\accounts\models.py", línea 8, en from collection.models import Report
Archivo "F:\nombre_del_proyecto\colección\modelos.py", línea 2, desde cuentas.modelos import ReporterProfile, Usuario
ImportError: no se puede importar el nombre 'ReporterProfile' del módulo parcialmente inicializado 'accounts.models' (probablemente debido a una importación circular) (F:\project_name\accounts\models.py)
Creo que el error se debe a un patrón de importación incorrecto. ¿Qué tengo que hacer?
Para ForeignKey :
En lugar de usar reporterprofile = models.ForeignKey(ReporterProfile, ...) , puede usar reporterprofile = models.ForeignKey("accounts.ReporterProfile", ...) , para que no tenga que importar el modelo.
Para evitar el error de importación de circulor:
En lugar de usar :
from accounts.models import ReporterProfile [...] foo = ReporterProfile()Puedes usar:
import accounts.models [...] foo = accounts.models.ReporterProfile()Asegúrese de que está escribiendo los modelos de creación nane porque tengo el mismo problema y cuando eche un vistazo a mi importación, escribí userFormdata en lugar de userformData (escribí en mayúscula la 'f')
#wrong inport from users_handler.models import userFormData #Correct import from users_handler.models import userformDataimportar los modelos como a continuación
import collection class ReporterProfile(models.Model): .... def published_articles_number(self): num = collection.models.Report.objects.filter(reporterprofile=self.id).count() return numsimilar
import accounts from <project_name> import settings class Report(models.Model): reporterprofile = models.ForeignKey(accounts.models.ReporterProfile, on_delete=models.CASCADE, verbose_name="Report Author") ... class Comment(models.Model): report = models.ForeignKey(accounts.models.Report, on_delete=models.CASCADE, related_name='comments') user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name="Comment by") ...