【问题标题】:How to remove an object from another object in django? - python如何从 django 中的另一个对象中删除一个对象? - Python
【发布时间】:2018-02-23 08:14:54
【问题描述】:

我有一个由Profile.objects.all() 创建的查询集。我想在模板中打印它,除了它的一行。我怎样才能在模板中做到这一点?或者如果在模板中不可能,我该如何在视图中做到这一点?

【问题讨论】:

  • Profile.objects.all() 不是一个对象,它是一个queryset。您能否更具体地说明您的问题/问题?
  • 是的,你说得对,它是一个查询集。我想打印除其中之一之外的所有行。例如,如果数据库表中有 5 行,我将它们全部取 Profile.objects.all(),但我想打印第 1 到第 4 行,我不想打印第 5 行。
  • Profile.objects.all().exclude(...)

标签: django django-models django-templates django-views


【解决方案1】:

首先Profile.objects.all() 是QuerySet。您可以通过迭代打印出QuerySet中每个实例的__str__()方法。

如果你只想忽略最后一个,你可以这样,

{% for item in profiles %}

    {% if not forloop.last %}

        {{ item }}

    {% endif %}

{% endfor %}

【讨论】:

  • 这不是更好的答案。因为它适用于最后一个对象,但不适用于 ID=10 和 1.000.000 个对象的对象。你必须使用.exclude() 来做到这一点。
  • 是的,当您有多个具有一些您不想显示的常见条件的对象时。
【解决方案2】:

您可以像这样使用.exclude() 查询集:

YourObjet = Profile.objects.exclude(**kwargs)

此 Django 查询将返回模型中的所有对象,不包括排除对象。

那里有 django 文档:.exclude()

示例:

MyObject = Individu.objects.all()

返回:

<QuerySet [<Individu: 1 19312STRASBOURG-402541 JUNGBLUTH Valentin>, <Individu: 2 18812STRASBOURG-797846 ARNOUD Laurent>, <Individu: 3 None TEST Test>, '...(remaining elements truncated)...']>

MyObject = Individu.objects.exclude(id="2")

返回:

<QuerySet [<Individu: 1 19312STRASBOURG-402541 JUNGBLUTH Valentin>, <Individu: 3 None TEST Test>, '...(remaining elements truncated)...']>

【讨论】:

  • 在模板中不可以吗?
  • 您只需在视图的上下文字典中添加YourObject。然后在你的模板中调用YourObject变量,它就可以工作了
  • 我加了一个例子 ;)
猜你喜欢
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 2022-06-11
  • 2011-10-12
  • 2021-07-11
  • 2018-07-08
相关资源
最近更新 更多