Ссылка на круговую модель Django/Python

Ok Итак, я пытаюсь написать хороший организованный код и фактически создавать отдельные приложения django, а не комбинировать все вместе в 1. Моя проблема в том, что у меня есть 3 приложения, каждая из которых ссылается на одну другую модель из следующего приложения. Таким образом, в основном у меня бесконечный цикл, App A нужно знать о B.models.something1, App B должен знать о C.models.Somthing2, а App C должен знать об A.models.something3. Это, конечно, не сработает, для тех, кто задается вопросом, действительно ли это проблема:). Есть ли что-то похожее на предварительное определение классов, поэтому python будет знать, что классы действительно существуют?

Спасибо.

EDIT: Больше Код: К сожалению, характер и модели моего проекта являются конфиденциальными, поэтому мне придется изменить имена, чтобы они отражали нечто совершенно иное, но код останется прежним.

Учитель/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

студент/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)

школа/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

Итак, вот что я получаю:

Файл "/Users/userzero/django/myapp/school/models.py", строка 2, в   from teacher.models import Местоположение Файл "/Users/userzero/django/myapp/teacher/models.py", строка 2, в   от student.models import Жалоба Файл "/Users/userzero/django/myapp/student/models.py", строка 3, в   от школы .models import School Файл "/Users/userzero/django/myapp/casino/models.py", строка 2, в   from teacher.models import Местоположение ImportError: невозможно импортировать имя Местоположение

Ответы

Ответ 1

Из docs:

Обращаться к моделям, определенным в другом приложения, вы можете явно указать модель с полным ярлык приложения. Например, если Модель производителя выше определена в другое приложение, называемое производством, вам нужно будет использовать:

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

Эта ссылка может быть полезна при разрешении кругового импорта зависимостей между двумя приложениями.

Итак, для ваших приложений, попробуйте изменить, например.

 location = models.ForeignKey(Location) 

to

 location = models.ForeignKey('Location')

Обратите внимание, что если эта модель находится в другом приложении, вам также нужно указать это (спасибо @Bran за указание этого), например

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