0

TextObj、User、SecurityCheck という 3 つのテーブルがあります。3 番目のテーブルには、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))

sharedWith フィールドに特定のユーザーと特定のファイル名 (TextObj の属性) を持つ 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 を自動的に処理します。関係を広げるには、必要なフィールドに到達するまで、モデル全体の関連フィールドのフィールド名を 2 つのアンダースコアで区切って使用します。

裏返しにも効きます。「逆」の関係を参照するには、小文字のモデル名を使用します。

于 2013-06-21T10:21:10.700 に答える