【问题标题】:Use django query __isnull with field name containing spaces or hyphens将 Django 查询 __isnull 与包含空格或连字符的字段名称一起使用
【发布时间】:2021-05-01 07:51:30
【问题描述】:

基本问题是我不能使用key-value-argument

field_variable_name__isnull=True/False

field_variable_name=None

field_variable_name 包含空格或连字符时(例如“这是我的字段变量名”或“这是另一个”)。

我查找了how to filter a models.object-list with 'varname__isnull=True',但没有找到解决方案,因为给出了包含空格字符的名称:

在我的views.py 中,我有以下功能:

def currenttodos(request):
    todos = Todo.objects.filter(user=request.user, time_completed__isnull=True)
    return render(request, 'todo/currenttodos.html', {'todos': todos})

models.py 文件中的模型Todo 包含以下字段:

time_completed = models.DateTimeField(null=True, blank=True)

这种方式可以工作,但实际上我想以不同的方式调用 time_completed - 字段,例如 "Completion time" 使用 name-参数:

time_completed = models.DateTimeField(null=True, blank=True, name="Completion time")

现在,问题是我不能使用__isnull - 参数,因为名称包含空格。 以下所有示例均无效:

todos = Todo.objects.filter(user=request.user, Completion time__isnull=True)
todos = Todo.objects.filter(user=request.user, "Completion time"__isnull=True)
todos = Todo.objects.filter(user=request.user, "Completion time"=None)
etc.

我怎样才能使包含空格或连字符的名称起作用?

【问题讨论】:

  • 使用“完成时间”作为名称的目的是什么,总有你可以使用的标签
  • 我应该在哪里使用label-参数? Django 模型字段不包含此字段(刚刚收到错误 got an unexpected keyword argument 'label')。

标签: django django-models django-views django-forms


【解决方案1】:

这是一个类似帖子的链接: Filtering for empty or NULL names in a queryset

基本上,该用户希望能够排除为空或空白的实例。正如你所看到的,有几个选项可以做到这一点。我首选的方法是将过滤条件链接在一起,因为对我来说它更直接且易于理解,但是您有一些选择。

【讨论】:

  • 感谢分享。但是,我检查了所有的答案,不幸的是没有一个回答我的问题。
  • 想澄清一点?据我所知,您正在尝试获取字段 == '' 或字段 == ' ' 的所有实例。如果是这样的话,那么像 YourModel.objects.filter(Q(name__exact='') | Q(name__exact=' ')) 这样的东西应该可以工作。
【解决方案2】:

您可以删除 name 参数。没有必要。 django 将创建一个带有time_completed 属性标签的字段,但您只需像这样过滤

todos = Todo.objects.filter(user=request.user, time_completed__isnull=True)

【讨论】:

  • 恐怕我的问题没有被理解。我已经知道这行得通,谢谢。我担心的是是否可以将名称或标签更改为包含空格和连字符的其他内容?
  • 您想通过 django 在一个表中创建一个字段并为其设置自定义名称?对吗?
  • 我想创建一个 django 模型字段,其自定义名称与变量名称不同,如我的问题中所述。然后,我想检查它是否为空,但是一旦自定义名称包含空格或连字符,我就无法执行此检查(请参阅问题)。似乎只是避免以这种方式命名它是一种解决方法,没错,但这只是避免问题并不是很优雅;)
  • 查看我帖子的开头:“基本问题是当field_variable_name 包含空格或连字符时,我不能使用键值参数field_variable_name__isnull=True/Falsefield_variable_name=None(例如'这是我的字段变量名',或'这是另一个')。”
猜你喜欢
  • 1970-01-01
  • 2023-01-07
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多