停止自引用模型中的无限循环

时间:2020-10-29 11:57:49

标签: django django-models

我正在编写一个小实用程序,该实用程序使我可以用许多记录填充数据模型。 我使用python faker根据每个字段的字段类型设置其值。

接下来要做的是,我使用model._meta.get_fields提取所有字段,删除所有Rel类型,然后使用正确的值填充非关系字段。对于关系字段(其中.re_relation = True),我遵循与相关模型的关系,然后对那个模型也执行相同的操作,直到找到一个与其他模型没有任何关系的模型。然后为每个模型创建实例。

基本上是递归过程。

我的问题是自参考模型会导致无限循环。我曾想过将这些实例设置为null,但是将null设置为False的实例呢?

有什么干净的方法可以处理这种情况?我在网上或堆栈溢出都找不到任何内容。

ps:代码很长,所以我什么也没张贴。但是我可以,如果有必要。

1 个答案:

答案 0 :(得分:1)

通常,在可能存在无限循环的情况下,您可以通过设置一个计数器来防止这种情况,如果达到该计数,该计数器会退出循环。

在您的情况下,您可以显式检查该关系是否引用相同的模型,然后阻止它遵循该关系。

此外,引用自身的模型应允许该关系为空。