我正在尝试使用 django-treebeard 以 postgresql 作为数据库来操作分层数据。我当前的版本是:
Django==3.0.4
django-treebeard==4.3.1
djangorestframework==3.11.0
因此,当我使一个节点成为另一个节点的子节点,然后再次将子节点设置为根节点时,就会出现错误。负责移动节点的视图方法如下:
# Change a process's parent
@action(detail=True, methods=['patch'])
def change_parent(self, request, pk=True):
process = Process.objects.get(pk=pk)
print('current process ' + process.title)
data = request.data
if 'parent' in data:
new_parent_pk = data['parent']
if(new_parent_pk == 0):
process.move(process.get_root())
process.save()
elif(new_parent_pk > 0):
new_parent = Process.objects.get(pk=new_parent_pk)
process.move(new_parent, 'first-child')
process = Process.objects.get(pk=pk)
process.save()
此外,当移动的节点有子节点时,这在第一次尝试时会失败。我读到人们得出结论,这与数据库选择的排序规则有关。
- 如果这是错误的原因,那么 postgres 与 django-treebeard 一起使用的最佳配置是什么?
- 否则可能是什么问题(使用的代码与 treebeard 管理逻辑文件中的代码匹配)?
- 另外,是否有 django-treebeard 的替代品?