首页 > 解决方案 > 如何修复循环导入?

问题描述

看来我有一个循环导入错误。我目前只是在努力修复它。有谁知道我应该怎么做?

在我的 models.py 中,包含 ReservedItems 和 Order:

def reserveditem_pre_save_receiver(sender, instance, **kwargs):
    if not instance.order_reference:
        instance.order_reference = unique_order_reference_generator()

在我的 utils.py

from lumis.utils import get_random_string
from .models import Order, ReservedItem


def unique_order_reference_generator():

    new_id = get_random_string(length=10)

    reserved_item = ReservedItem.objects.filter(
        order_reference=new_id
    ).exists()
    order = Order.objects.filter(order_reference=new_id).exists()

    if reserved_item or order:
        return unique_order_reference_generator()
    else:
        return new_id

标签: django

解决方案


目前所有的建议都很好。将信号处理程序移出模型。模型很容易循环导入,因为它们无处不在,所以在 models.py 中只保留模型代码是个好主意。

就个人而言,我不喜欢代码中间的导入,所以我使用 Django 应用程序 API 来加载模型而不导入。

from django.apps import apps

def signal_handler(instance, *args, **kwargs):
    Order = apps.get_model('your_app', 'Order')
    ...

推荐阅读