Как предотвратить циклические ссылки в этих моделях Django?

Предположим, у меня в проекте есть 2 приложения Django: appA, appB.

appA содержит ModelA в файле models.py следующим образом:

class ModelA(models.Model):
    field1 = models.CharField(max_length=254, null=False, blank=False,)

appB содержит ModelB в файле modell.py следующим образом:

from appA.models import modelA

class ModelB(models.Model):
    field2 = models.CharField(max_length=254, null=False, blank=False,)
    model_A = models.ForeignKey(ModelA, related_name="blahblah")

Теперь я хотел бы добавить функцию @property в ModelA, которая будет возвращать все экземпляры ModelB, которые имеют эту ModelA в качестве внешнего ключа:

@property
def matching_model_bs(self):
    return ModelB.objects.filter(model_A=self)

Но для этого мне нужно импортировать appB.models в appA.models, но это приведет к циклическому импорту. Итак, как я могу добиться этого, не сталкиваясь с циклическим импортом?


person Saqib Ali    schedule 20.12.2014    source источник


Ответы (1)


Нет необходимости в этом имуществе. Функциональность уже встроена: вы можете просто сделать mymodelA.modelb_set.all().

(На самом деле, поскольку вы установили здесь related_name, это будет mymodelA.blahblah.all().)

См. документацию по отслеживание связей назад.

person Daniel Roseman    schedule 20.12.2014