2

モデルとしてのDjangoプロジェクトでは、次のようなものがあります。

class Company(models.Model):
    name = models.CharField(_(u"Name"), max_length=100)

INPUT_TYPES = (('U', _(u"User")), ('A', _(u"Administrator")))
class CompanyData(models.Model):
    company = models.ForeignKey(Company, related_name='data')
    input_type = models.CharField(_(u"Input type"), max_length=2,
                                  choices=INPUT_TYPES)
    active = models.BooleanField(_(u"Active"))
    datafield_1 = models.CharField(_(u"Data field 1"), max_length=100)
    datafield_2 = models.CharField(_(u"Data field 2"), max_length=100)
    datafield_3 = models.CharField(_(u"Data field 3"), max_length=100)

会社データは、ユーザーまたは管理者として入力できます。

企業の検索が可能です。検索は入力タイプを扱わずに行うことができますが、非アクティブな会社を除外したい (ユーザーまたは管理者によって非アクティブに設定されているかどうかに関係なく)。私はそのようなクエリを試しました:

Company.objects.filter(data__data_1='query string'
                       ).exclude(Q(data__active=False))

ただし、データ入力の 1 つがアクティブで、クエリ文字列と一致する場合、他のデータ入力が非アクティブであっても、会社が返されます。入力タイプを強制することで要求を洗練しようとしましたが、Django に CompanyData テーブルで 2 つの異なる結合ステートメントを作成させる方法が見つかりませんでした。

4

1 に答える 1

2

おめでとうございます。Django の ORM の弱点の 1 つを突き止めました。この種のクエリをオブジェクト構文で実行することはできません。これを行うには、生のクエリに頼る必要があります。

于 2012-09-20T23:15:31.287 に答える