0


レポートモデル内の任意のタイプ(AまたはB)のモデルを一般的な方法で参照できるように、一般的な外部キーを作成しました。
正常に動作しますが、私の問題は、特定のタイプのモデルを参照するすべてのReportインスタンスを取得するためのクエリを作成する必要があることです(たとえば、クラスAを参照するforeign_keyを持つすべてのReport)。データベースのcontent_typeにアクセスしようとしましたが、どうやらそれは不可能です(変数は存在しません...)これ
が私のモデルです:

class Report(models.Model):
  content_type = models.ForeignKey(ContentType)
  object_id = models.CharField(max_length=50)
  reported_item = generic.GenericForeignKey('content_type', 'object_id')

class A(models.Model):
  reports = generic.GenericRelation(Report)

class B(models.Model):
  reports = generic.GenericRelation(Report)

あなたはそれを行う方法を知っていますか?
何かが変わる場合に備えて、データベースにはmongoDBを使用しています。
どうもありがとう!

編集:
データベースにレポートオブジェクトを表示すると、結果は次のようになります。

db.website_report.findOne()
{
"_id" : ObjectId("50afa903a96c5c2f63000001"),
"content_type_id" : ObjectId("50afa903a96c5c2f63000000"),
"object_id" : "50afa8a8a96c5c2f53000001",
}

ご覧のとおり、データベースのコンテンツは私のモデルと何も似ていないので、クエリを実行して、foreign_keyがAのすべてのレポートを取得する方法がわかり
ません。手伝ってくれませんか。

4

3 に答える 3

3

dbがモデルを反映していないと思う理由がわかりません。ここに、コンテンツタイプ参照とオブジェクトIDがあります。vdoに必要なのは、どのコンテンツタイプがモデルAを参照しているかを調べることだけです。これは、コンテンツタイプのドキュメントで説明されています。

ct = ContentType.objects.get_for_model(A)
objs = Report.objects.filter(content_type=ct)
于 2012-11-24T23:17:59.140 に答える
0

これは私のプロジェクトの1つからのサンプルクラスであり、特定のモデルおよびQオブジェクトを使用するアプリによる制限を示しています

class ContainerItem(models.Model) :
    """Items for containers"""
    limit = models.Q(model="page") & (models.Q(app_label='events') | models.Q(app_label='press')) & ~models.Q(app_label='press', model='category')
    object_type = models.ForeignKey(ContentType, limit_choices_to=limit)
    object_id = models.IntegerField(db_index=True)
    object = generic.GenericForeignKey(
        ct_field = "object_type", 
        fk_field = "object_id"
    )
于 2012-11-24T23:19:31.500 に答える
-1

GenericForeignKeysでのフィルタリングはできません。

GenericForeignKeyの実装方法により、データベースAPIを介してこのようなフィールドをフィルター(たとえば、filter()およびexclude())で直接使用することはできません。GenericForeignKeyは通常のフィールドオブジェクトではないため、次の例は機能しません。

于 2012-11-24T22:49:01.440 に答える