我有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的属性)
答案 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。要跨越关系,只需使用跨模型的相关字段的字段名称,用双下划线分隔,直到到达所需的字段。
它也是倒退的。要引用“反向”关系,只需使用模型的小写名称。