0

我有 3 张桌子

  1. 托管组织文档
  2. 权利
  3. 文档权利映射

用户可以使用不同的表格上传文件和权利,但是有些权利与文件有链接,而文件与权利有链接。第三表映射文件和权限

class EntitlementDocumentMapping(models.Model):
uuid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)
managed_org_uuid = models.CharField(max_length=400)
document = models.ForeignKey(ManagedOrgDocument, on_delete=models.CASCADE)
entitlement = models.ForeignKey(ManagedOrgOraLicenseEntitlement, on_delete=models.CASCADE)

managed_org_documents =ManagedOrgDocument.objects.filter(managed_org_uuid=managed_org_uuid).order_by(*sort_order)

当我获取所有文档时,我想从 EntitlementDocumentMapping 表以及 Documents.id 与 EntitlementDocumentMapping.document.uuid 匹配的记录

4

1 回答 1

0

您可以F()为此使用:

from django.db.models import F

managed_org_documents =ManagedOrgDocument.objects.filter(managed_org_uuid=F('document__uuid')).order_by(*sort_order)

F()允许您从同一行或相关表的行访问值。

更新

您不需要额外的操作来获取文件。您可以通过以下方式简单地获取它们:

# example 1
for docs in managed_org_documents:
    print(docs.document)

# example 2
managed_org_documents.values('document')

您可以使用select_related来预取document信息,以便调用docs.document不会产生额外的数据库命中。

managed_org_documents.select_related('document')
于 2021-02-22T11:05:40.457 回答