Как устранить ошибку циркулярного импорта в django

Я создал MeterModel и MeterAbstract в приложении MeterApp. MeterAbstract имеет Meter_number, а MeterModel имеет связанное поле Meter.

Я использовал MeterAbstract в BillModel.

from MeterApp import MeterModel
class BillDetailModel(BillAbstract, MeterAbstract):                  
      Bill_Name=models.CharField(max_length=20, null=True, blank=False)
      .
      .

Теперь я хочу обновить некоторое поле MeterModel, поэтому я переопределяю метод save для обновления и использую

def save(self,*args, **kwargs):
    meter = MeterModel.objects.filter(meter_number=self.meter_number)

Но выдает ошибку на

     from MeterApp.models import MeterModel
ImportError: cannot import name 'MeterModel' from partially initialized module 'MeterApp.models' (most likely due to a circular import) 

Как я могу решить эту проблему и использовать абстрактные поля для переопределения метода сохранения?

Вы можете импортировать локально, чтобы избежать этого (поместив импорт в блок кода, в котором вы будете его использовать).

Вам необходимо указать to параметр models.ForeignKey как строку, чтобы предотвратить круговые зависимости импорта, смотрите официальную документацию для получения дополнительной информации.

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

Итак, ваши модели должны выглядеть примерно так:

class MeterDetailModel(MeterAbstract):                                                        
      tarrif                      = models.ForeignKey
      ca_number                       = models.ForeignKey
      last_bill_number                = models.ForeignKey('BillModel')
Вернуться на верх