django - 如何修复循环导入?
问题描述
看来我有一个循环导入错误。我目前只是在努力修复它。有谁知道我应该怎么做?
在我的 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
解决方案
目前所有的建议都很好。将信号处理程序移出模型。模型很容易循环导入,因为它们无处不在,所以在 models.py 中只保留模型代码是个好主意。
就个人而言,我不喜欢代码中间的导入,所以我使用 Django 应用程序 API 来加载模型而不导入。
from django.apps import apps
def signal_handler(instance, *args, **kwargs):
Order = apps.get_model('your_app', 'Order')
...
推荐阅读
- mysql - 有没有办法将 JSON 字段中的数组与 MySQL 中的 JSON_ARRAY 进行比较?
- java - 使用 Apache Camel 从另一个 API 使用 JSON 并将其写入 CSV
- sql - 如何使用 postgres 获取日期
- bokeh - 散景:使用矩形字形、宽度和 x 共享
- python - Berkeley PacMan 项目中的 Tkinter 问题 - tkinter.TclError: no display name and no $DISPLAY environment variable
- c++ - 任务是找到一个总和最大的子序列,这样子序列中的数组中不应该有相邻的元素
- hyperledger-fabric - 我们可以在连接配置文件中使用定义的排序器覆盖发现的排序器吗?
- java - 如何将 http 请求回滚到将数据保存到 db 的 api 端点
- reporting-services - 3D 面积图 SSRS 报告第三轴
- powershell - 我们需要每天将“report assinement 09.09.2020.xlsx”(更改日期行 08.09.2020 等不)之类的文件重命名为 myproject.xlsx