0

私の簡略化されたモデルは次のとおりです。

class Function(models.Model):
    name = models.CharField(max_length=20)
    params = models.ManyToManyField("Param")

class Param(models.Model):
    name = models.CharField(max_length=20)
    value = models.CharField(max_length=20)

したがって、すべての関数オブジェクトには、次のようなパラメータのセットがあります。

f = Function(name="my_function")
f.save()
param1 = Param(name="height", value="100")
param1.save()
param2 = Param(name="width", value="200")
param2.save()
f.params.add(param1)
f.params.add(param2)

問題は、関数名、パラメーター名、パラメーター値のフィルターを使用して関数を選択する方法がわからないことです。

上記の機能の場合、選択は次のようになります。

名前が「height」で値が「100」のパラメーターと、名前が「width」で値が「200」のパラメーターを含む「my_function」という名前の関数を取得します。

前もって感謝します!

4

1 に答える 1

3

これはうまくいくかもしれません:

from django.db.models import Q

functions = (Function.objects
    .filter(name='my_function')
    .filter(Q(params__name='height') & Q(params__value="100")
    .filter(Q(params__name="width") & Q(params__value="200"))
于 2011-10-25T00:32:31.797 に答える