【问题标题】:Django model filter with default value具有默认值的 Django 模型过滤器
【发布时间】:2021-05-22 02:16:48
【问题描述】:

我想做类似于here 的事情,但如果它没有作为参数传递,我想要一个具有默认值的过滤器。

例如:

class MyUserManager(models.Manager):
    def get_queryset(self, is_active=True):
        return super().get_queryset().filter(is_active=is_active)


class User(AbstractUser):
    # ...
    manager = MyUserManager()

所以我不必记得每次都使用is_active=True 进行过滤,因为我一直只想要活跃用户,除了我故意传递is_active=False

我认为get_queryset() 覆盖不适用于这种情况。

【问题讨论】:

    标签: python python-3.x django


    【解决方案1】:

    你能在里面输入if吗?

    class MyUserManager(models.Manager):
        def get_queryset(self, is_active):
            if is_active == True or is_active == None:
                return super().get_queryset().filter(is_active=is_active)
            elif is_active == False:
                return super().get_queryset().filter(is_active=is_active)
    

    【讨论】:

    • 设置 is_active=True 作为方法参数,如果它没有作为参数传递,它的值已经设置为 True
    • 当我遇到类似的问题时,我只是制作了一个单独的函数。在您的情况下,它可能类似于def get_active_users: return super().get_queryset().filter(is_active=True)def get_inactive_users: return super().get_queryset().filter(is_active=False)。当查询与过滤器和其他东西混淆时,我通常会这样做,但它也可能适用于您的情况
    【解决方案2】:

    类似于答案 1

    class MyUserManager(models.Manager):
    def get_queryset(self, is_active):
    
        if is_active not False:
          is_active = True:
        return super().get_queryset().filter(is_active=is_active)
       
    

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 2021-03-19
      • 1970-01-01
      • 2017-05-02
      • 2018-10-22
      • 2015-06-10
      • 2016-04-08
      • 2010-10-25
      • 2011-09-03
      相关资源
      最近更新 更多