为匹配特定条件的任何外部项筛选多对多字段的查询集



我有两个模型:

class BackupItems(models.Model):
name = models.CharField(max_length=100)
class CloudObjects(models.Model):
creation_time = models.DateTimeField()
removed_date = models.DateTimeField()
item = models.ManyToManyField(BackupItems)

为某些备份操作保存数据。CloudObject是一个表,其中包含条目创建和删除的信息。对于遗留问题,所有新条目的删除日期硬编码为20999-12-31。删除后,将此日期替换为实际日期。

在视图中,我有简单的查询,其中我列出了BackupItems中的所有项。

BackupItems.objects.all()

现在,我想只列出那些备份项目有任何cloudobject在未来(removed_date = 2099-21-31)。我不关心给定的项目是什么,如果这个CloudObject对于给定的BackupItem在未来存在,这对我来说很好。我不想在查询集中看到任何项,其中在未来没有给定BackupItem的CloudObjects。

如何创建这种视图?

您可以使用Django ORM的filter()方法并将其作为上下文变量传递给视图,如下所示:

from django.shortcuts import render
from .models import BackupItems, CloudObjects
import datetime

def backup_items(request):
future_date = datetime.datetime(2099, 12, 31)
backup_items = BackupItems.objects.filter(cloudobject__removed_date=future_date).distinct()
context = {'backup_items': backup_items}
return render(request, 'backup_items.html', context)

这将返回一个BackupItems对象的查询集,该查询集具有removed_date为20999-12-31的CloudObject。distinct()方法确保每个BackupItem只返回一次。

最新更新