【问题标题】:Django ORM: checking if a field is blank or filled [duplicate]Django ORM:检查字段是空白还是填充[重复]
【发布时间】:2019-11-28 07:23:46
【问题描述】:
title = models.ForeignKey(blank=True, null=True)

我正在尝试检查标题字段是填充还是空白,我该如何做到这一点?

【问题讨论】:

    标签: django django-orm


    【解决方案1】:

    因此,querysetsq objects 周围的 Django 文档将成为您的朋友。

    一开始检查某个东西是null 还是''(空)有点棘手,但是一旦您了解了SQL 和Django ORM,它就会变得更容易。

    首先要说明的是null != '' 在SQL 中它们是两个不同的值。该帖子的前两个答案不正确,因为他们没有阅读您的问题。

    基本上,根据用例,您可以执行三种检查,

    1. 结果是否为空 - YourModel.objects.filter(title='')
    2. 结果是否为空 - YourModel.objects.filter(title__isnull=True)
    3. 结果是空还是空(使用Q objects)-YourModel.objects.filter(Q(title='') | Q(title__isnull=True))

    在您的情况下,您将需要选项 3,因为您要求在结果集中显示空值和空值的结果集。

    例子:

    #  models.py
    class TestModel(models.Model):
        a = models.CharField(max_length=10, blank=True, null=True)
    
    #  code
    TestModel.objects.create() # id: 0
    TestModel.objects.create(a='') # id: 1
    TestModel.objects.create(a='a value') # id: 2
    
    # option 1 above
    TestModel.objects.filter(a__isnull=True)
    #> <QuerySet [<TestModel: TestModel object (1)>]>
    
    #option 2 above
    TestModel.objects.filter(a='')
    #> <QuerySet [<TestModel: TestModel object (2)>]>
    
    #option 3 above
    from django.db.models import Q
    TestModel.objects.filter(Q(a='') | Q(a__isnull=True))
    #> <QuerySet [<TestModel: TestModel object (1)>, <TestModel: TestModel object (2)>]>
    
    

    【讨论】:

      【解决方案2】:

      您可以通过isnull检查字段是否为空白

      YourModel.objects.filter(title__isnull=True)
      

      这将返回所有没有标题的对象。

      【讨论】:

        【解决方案3】:

        我正在尝试检查标题字段是填充还是空白,我该如何做到这一点?

        blank不是一个值。空白表示表单中不需要该字段(它不会显示)。通常如果是blank=True,那么null=True 也是如此(或者您需要提供一个明确的默认值)。

        您可以使用None,它相当于 Python 中的NULL,例如:

        MyModel.objects.filter(<b>title=None</b>)

        或者您可以使用__isnull [Django-doc] 查找使其更明确:

        MyModel.objects.filter(<b>title__isnull=True</b>)

        【讨论】:

          猜你喜欢
          • 2017-04-20
          • 2016-04-03
          • 2014-04-28
          • 1970-01-01
          • 1970-01-01
          • 2011-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多