django模型复杂查询

时间:2013-06-21 10:12:35

标签: django django-models

我有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的属性)

1 个答案:

答案 0 :(得分: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。要跨越关系,只需使用跨模型的相关字段的字段名称,用双下划线分隔,直到到达所需的字段。

     

它也是倒退的。要引用“反向”关系,只需使用模型的小写名称。