【问题标题】:is_deleted for nodes with Django MPTTis_deleted 用于 Django MPTT 的节点
【发布时间】:2014-10-21 18:32:34
【问题描述】:

我使用 Django MPTT。

我不会删除我的节点,而是更新字段 is_deleted 并过滤节点,因此“已删除”节点不会显示。

如果一个节点被“删除”但它的一些后代没有被删除,就会出现问题。

不应显示“已删除”节点的后代。当我“删除”一个节点时,我可以通过为所有后代设置 is_deleted 字段来解决这个问题,但这不是最好的解决方案。

如何解决?

【问题讨论】:

    标签: python django django-models django-views django-mptt


    【解决方案1】:

    只需将 is_deleted 设置为第一级(根)对象some_object.get_root(),然后获取此查询集中所有对象的后代SomeModel.objects.filter(level=0).exclude(is_deleted=True)django-mptt get_descendants for a list of nodes

    【讨论】:

    • 我对仅为根节点设置is_deleted 不感兴趣。有时它是我要删除的根节点,但有时它是其他级别的节点。
    • 然后将is_deleted=True设置为已删除对象,然后black_list = get_queryset_descendants(SomeModel.objects.filter(is_deleted=True), include_self=True)您将获得已删除对象及其后代的列表,最后您必须将它们全部排除在SomeModel.objects.exclude(pk__in=[o.id for o in black_list])
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    相关资源
    最近更新 更多