Django "update_or_create" API:如何通过创建或更新来过滤对象?

Django "update_or_create" API: how to filter objects by created or updated?

所以,我正在使用 Django update_or_create API 来构建我的表单数据。它工作正常...但是,一旦构建,我需要一种方法来检查哪些配置文件实际更新了或者它们是否是第一次创建的?

举个例子:

    for people in peoples:
        people, updated = People.objects.update_or_create(
            id=people.person_id,
            defaults={
                'first_name': people.first_name,
            }
        )

过滤查询集:

   people = People.objects.filter(
        id__in=whatever,
   )

但是,现在,我正在尝试通过创建或更新来过滤查询集...但是没有看到 API(例如,各种筛选器)

所以,我想做类似的事情:

updated = Person.objects.filter(updated=True, created_for_first_time=False)

and then I can write something like

if updated:
   do this
else:
   do this

基本上,我只想检查配置文件是否是第一次更新或创建的。

如您在问题中所示,update_or_create 方法 returns 一个元组 (obj, created),其中对象中的 objcreated 是显示是否创建了新对象的布尔值。

您可以检查布尔字段的值,并创建一个列表来存储新创建的对象的 ID

new_objects = []
for people in peoples:
    obj, created = People.objects.update_or_create(...)
    if created:
        new_objects.append(obj.id)

然后您可以使用该列表进行过滤:

new_people = People.objects.filter(id__in=new_objects)
existing_people = People.objects.exclude(id__in=new_objects)

当您致电 update_or_create 时:

person, created = People.objects.update_or_create(...)

如果记录是新创建的,createdreturn 值将是 True,如果是已更新的现有记录,则值为 False。如果您需要根据这些信息采取行动,最好在您可以访问它的情况下就在这里进行。

如果你以后需要做,我能想到的唯一方法是设计一个支持它的模式,即有 create_datelast_modify_date 字段,如果这两个字段是等于,您知道该记录自创建以来未被修改。