根据属性过滤查询集,使用方法参数

2024-09-27 07:27:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找到一种优雅的方法来创建基于queryset的方法,其结果会根据参数而变化

我有一个MyEvent类,我想检索元素,或者是所有元素,或者是未取消的元素,或者是取消的元素。 我使用了3种不同的方法,但我想简化一下。我用一种方法找到了另一种方法,但我仍然不相信这是最干净的方法。你觉得这个怎么样?还有更好的主意吗

@classmethod
def get_events(cls, my_filter=None):

    # Some stuff happens here.

    events = MyEvent.objects.filter(... # some filter here)

    if my_filter is None:
        return events
    elif my_filter == "cancelled":
        return events.filter(is_cancelled=True)
    elif my_filter == "uncancelled":
        return events.filter(is_cancelled=False)
    else:
        raise Exception("Unknown filter value")

我想在这里我必须在views.py中调用get_events()方法,这样我就可以使用一个管理器,但这也是同样的问题


Tags: 方法none元素参数getreturnhereis
1条回答
网友
1楼 · 发布于 2024-09-27 07:27:18

大多数人都希望在ModelManager中看到这种代码。您不需要这样做,但这会使您的代码对其他了解Django的人来说更令人惊讶

要求您指定负数的接口通常令人困惑。例如,在MyEvent对象的管理中,您将有一个带红色减号的is_cancelled列。这往往会让人感到不舒服;-)您可以在界面中通过适当命名参数来解决这一问题:

@classmethod
def get_events(cls, active=None):
    # active should be True or False if specified

    # Some stuff happens here.
    events = cls.objects.filter(... # some filter here)  # note: using cls

    if active is None:
        return events

    return events.filter(is_cancelled=not active)

这也使逻辑变得更短/更简单

相关问题 更多 >

    热门问题