1

私はこのようなモデルを持っています:

class Model1(models.Model):
    .
    .
    .

および拡張モデル:

 class Model2(Model1):
    .
    .
    .

このクエリでは:

model1 = Model1.objects.all()

上記のクエリで、継承されたモデル (Model2) に属するアイテムを見つけるにはどうすればよいですか?

編集: Model1 からこのクエリにアクセスしたい:

class Model1(models.Model):
      def is_model2(self):
         m2 = self.objects.filter(model2__isnull=False)
             if m2.count() > 0:
                if self in m2:
                    return True
                else:
                    return False

前もって感謝します

4

2 に答える 2

2

django-model-utilsInheritanceManagerからも使用できます。基本モデルを照会する場合でも、正しいインスタンスが返されます。

于 2012-04-12T14:07:34.303 に答える
1

Model1がないと仮定するとclass Meta: abstract = True、これは複数テーブルの継承です。

あなたが使用することができます:

model2 = Model2.objects.all()

すべてのModel2オブジェクトがであるModel1ため、または一度に 1 つずつクエリを実行できます。

for m in model1:
    try:
        m.model2 # Try to use the Model2 object
    except Model2.DoesNotExist:
        pass

またはクエリをフィルタリングします。

q = model1.filter(id__in=Model2.objects.all())

あなたが私たちに与えたわずかなものから、どのオプションが最善かを判断するのは難しい.

編集:Model1 aが aであるかどうかを関数に伝えたいだけの場合はModel2、次のものが必要です。

class Model1(models.Model):
    def is_model2(self):
        try:
            self.model2
        except Model2.DoesNotExist:
            return False
        return True
于 2012-04-12T12:17:06.877 に答える