使用Django ORM使用不同模型的值更新对象,这些值由多个列连接,并在其FKs上进行附加筛选

使用Django ORM使用不同模型的值更新对象,这些值由多个列连接,并在其FKs上进行附加筛选,django,django-queryset,django-orm,Django,Django Queryset,Django Orm,以下是我的模型的外观: EntryGroup(models.Model): ... EntrySource(models.Model): entry_group = FK(EntryGroup) ... Entry(models.Model): entry_group = FK(EntryGroup) ... EntryItem(models.Model): entry = FK(Entry) attribute_1 = ... attribute_2 =

以下是我的模型的外观:

EntryGroup(models.Model):
  ...

EntrySource(models.Model):
  entry_group = FK(EntryGroup)
  ...

Entry(models.Model):
  entry_group = FK(EntryGroup)
  ...

EntryItem(models.Model):
  entry = FK(Entry)
  attribute_1 = ...
  attribute_2 = ...
  ...

EntryItemCandidate(models.Model):
  entry_source = FK(EntrySource)
  attribute_1 = ...
  attribute_2 = ...
  existing_entry_item = FK(EntryItem, null=True)
  ...

我正在尝试实现以下功能:

从模型EntryItemCandidate中获取具有指定字段条目\源\ id(FK EntrySource)的所有对象,并使用满足以下条件的对象EntryItem id更新其现有条目\项字段:

  • EntryItem与EntryItemCandidate具有相同的字段属性_1和属性_2的值

  • EntryItem的条目与EntryItemCandidate的EntrySource字段条目组(FK EntryGroup)具有相同的字段条目组(FK EntryGroup)值

  • 如果没有符合这些条件的EntryItem,exitsting_entry_项应设置为Null

  • 我曾经对每个EntryItemCandidate执行迭代操作,但这是一种缓慢的方式(它将为每个任务执行10000次查询)

    然后,我使用SQL执行了此操作:

    update entry_item_caindidate
    set
      entry_item_candidate.existing_entry_item = entry_item.id
    from 
      entry_item_candidate
      inner join entry_item on 
        entry_item_candidate.attribute_1 = entry_item.attribute_1
        and entry_item_candidate.attribute_2 = entry_item.attribute_2
      inner join entry on entry.id = entry_item.entry_id
      inner join entry_source on entry_source.id = entry_candidate.entry_source_id
    where
      entry_source.entry_group_id = entry.entry_group_id
      and entry_item_candidate.entry_source_id = {param}
    
    
    但由于我希望在多个数据库引擎之间移动,所以我希望使用纯查询集而不进行迭代(上面的查询在sqlite上不起作用,但在MSSQL上起作用,因为UPDATE…FROM子句)

    这可能吗