type tutorial queryset python django django-models

tutorial - Referencia de modelo circular de Django/Python



models django unique (1)

Ok, trato de escribir un buen código organizado y de crear aplicaciones django separadas en lugar de agrupar todo en 1. Mi problema es que tengo 3 aplicaciones que hacen referencia a 1 modelo diferente de la siguiente aplicación. Así que, básicamente, tengo un bucle infinito, la aplicación A necesita saber acerca de B.models.something1, la aplicación B necesita saber acerca de C.models.Somthing2, y la aplicación C necesita saber acerca de A.models.something3. Esto, por supuesto, no se ejecutará, para aquellos que se preguntan si esto es realmente un problema :). ¿Hay algo que se asemeje a una predeclaración de clases, así que Python sabrá que las clases realmente existen?

Gracias.

EDITAR: Más Código: desafortunadamente la naturaleza y los modelos de mi proyecto son confidenciales, así que tendré que cambiar los nombres para reflejar algo completamente diferente, pero el código seguirá siendo el mismo.

profesor / models.py

from django.db import models from myapp.student.models import * from django.contrib.auth.models import User class Teacher(models.Model): """(description)""" user = models.ForeignKey(User) name = models.CharField(max_length=100) phone = models.CharField(max_length=13) phone_ext = models.CharField(blank=True, max_length=5) fax = models.CharField(blank=True, max_length=13) fax_ext = models.CharField(blank=True, max_length=100) url = models.URLField(blank=True, verify_exists=True) complaint = models.ManyToManyField(Complaint) city = models.CharField(blank=True, max_length=100) state = models.CharField(blank=True, max_length=100) postal_code = models.CharField(blank=True, max_length=15) location = models.ManyToManyField(Location) def __unicode__(self): return self.name class Location(models.Model): """(description)""" city = models.CharField(blank=True, max_length=100) state = models.CharField(blank=True, max_length=100) country = models.CharField(blank=False, max_length=100) def __unicode__(self): return self.city + ", " + self.state +", "+self.country

estudiante / models.py

from django.db import models from django.contrib.auth.models import User from myapp.school.models import School class Student(models.Model): """(Student description)""" user = models.ForeignKey(User) country = models.CharField(max_length=100) state = models.CharField(max_length=100) city = models.CharField(max_length=100) locale = models.CharField(blank=False, max_length=5) learningtype = models.CharField(blank=True, max_length=100) sites = models.TextField(blank=True) def __unicode__(self): return str(self.user) class Complaint(models.Model): """(Complaint description)""" student = models.ForeignKey(Student) site = models.ForeignKey(School) complaint = models.TextField(blank=False) def __unicode__(self): return str(self.site)

escuela / models.py

from django.db import models from myapp.teacher.models import Location class School(models.Model): """(School description)""" name = models.CharField(max_length=100) url = models.URLField(verify_exists=True) img = models.ImageField(upload_to="casion_img/") rating = models.FloatField() description = models.CharField(blank=True, max_length=300) goodstanding = models.BooleanField(default=True) location = models.ForeignKey(Location) def __unicode__(self): return self.name

Así que esto es lo que obtendré:

Archive "/Users/userzero/django/myapp/school/models.py", línea 2, en from teacher.models import Location File "/Users/userzero/django/myapp/teacher/models.py", línea 2, en de student.models import Complaint File "/Users/userzero/django/myapp/student/models.py", línea 3, de school.models import School File "/Users/userzero/django/myapp/casino/models.py ", línea 2, desde teacher.models import Location ImportError: no se puede importar el nombre Location


De los documentos :

Para hacer referencia a los modelos definidos en otra aplicación, puede especificar explícitamente un modelo con la etiqueta de la aplicación completa. Por ejemplo, si el modelo del fabricante anterior se define en otra aplicación llamada producción, necesitaría usar:

class Car(models.Model): manufacturer = models.ForeignKey(''production.Manufacturer'')

Este tipo de referencia puede ser útil al resolver dependencias circulares de importación entre dos aplicaciones.

Entonces, para sus aplicaciones, intente cambiar, por ejemplo

location = models.ForeignKey(Location)

a

location = models.ForeignKey(''Location'')

Tenga en cuenta que si este modelo está en una aplicación diferente, debe especificarlo también (gracias @Bran para señalar esto), por ej.

location = models.ForeignKey(''teacher.Location'')