0
class ModelA(models.Model):
    model_b = models.ManyToManyField('models.ModelB')

class ModelB(models.Model):
    some_bool = models.BooleanField(default=False)

これら 2 つのモデルが与えられた場合、ModelA のインスタンスに関連する ModelB のインスタンスが 2 つあるとします...

mod_a = ModelA()
mod_a.save()

mod_b1 = ModelB(some_bool=True)
mod_b1.save()

mod_b2 = ModelB(some_bool=False)
mod_b2.save()

mod_a.model_b.add(mod_b1, mod_b2)

次のようなクエリを実行したいと思います。

queryset = ModelA.objects.exclude(model_b__some_bool=True)

ただし、ModelA インスタンスの関連するすべての ModelB インスタンスを繰り返し処理し、ModelB インスタンスのsome_boolフィールドのいずれかが True に設定されている場合はそのインスタンスを除外します。これにはより複雑なクエリが必要になることは承知しています (私が示したものは、遭遇した ModelB の最初のインスタンスのみをチェックし、完全にそれに基づいています)。

4

1 に答える 1

2

これ:

私が示したものは、遭遇したModelBの最初のインスタンスのみをチェックし、完全にそれに基づいています

真実ではない。あなたが示したクエリは、あなたが望むことを正確に行います.関連するmodel_bにsome_bool = Trueがある場合、すべてのModelAsを除外します.

于 2013-08-21T11:43:33.520 に答える