0

我有 3 个表,TextObj、User、SecurityCheck。第三个表有一个引用 TextObj 的外键属性 (textobj),并且有一个从 SecurityCheck 到 User 的多对多字段 (sharedWith)。

class SecurityCheck(models.Model):
    textobj=models.ForeignKey(TextObj)
    owner=models.CharField(max_length=255)
    sharedWith=models.ManyToManyField(User)

    def __init__(self,owner,filename,requestingUsername):   
        self.owner=owner
        self.textobj=TextObj.filter(filename=filename)
        self.sharedWith.add(User.objects.filter(username=requestingUsername))

我需要做一个查询来获取 Textobj 的所有实例,这些实例在 sharedWith 字段中有一个特定的用户和一个特定的文件名(这是 TextObj 的一个属性)

4

1 回答 1

1

您可以轻松地进行跨越(反向)关系的查询:

TextObj.objects.filter(securitycheck__sharedWith=user, filename="foo")

https://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships

Django 提供了一种强大而直观的方式来“跟踪”查找中的关系,在幕后自动为您处理 SQL JOIN。要跨越关系,只需跨模型使用相关字段的字段名称,用双下划线分隔,直到找到所需的字段。

它也可以向后工作。要引用“反向”关系,只需使用模型的小写名称。

于 2013-06-21T10:21:10.700 回答