看来我有一个循环导入错误。我目前只是在努力修复它。有谁知道我该怎么办?
在我的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
您可以在函数主体中本地导入模块,因此:
from lumis.utils import get_random_string
def unique_order_reference_generator():
from .models import Order, ReservedItem
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
因此,这意味着在Python加载文件时不会加载模块,而是在实际调用函数时加载模块。结果,我们可以加载该unique_order_reference_generator
函数,而不必加载实际上依赖于此函数的模块。
请注意,就像@Alasdair所说的那样,信号通常是在专用文件(signals.py
)中定义的,例如,应将其加载ready()
到应用程序的功能中。但是,无论您如何构造代码,都应经常使用本地导入来避免循环导入。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句