1

我正在尝试使用 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 的替代品?
4

0 回答 0