いくつかの要素が削除されたときのモデル継承の問題

django inheritance model

モデルの継承には、http://www.djangosnippets.org/snippets/1034/のスニペットを使用します。 最初はうまくいきました。 ただし、データベース内のいくつかの要素を削除した後、コードが正しく機能しません。 デバッグしているうちに、問題はメソッドas_leaf_classにあることがわかりました。 次のコードでは:

if(model ==食事):自分自身を返すmodel.objects.get(id = self.id)を返す

要素が削除されると、最後の行で例外が発生します。 誰もがこれに対する解決策を与えることができますか?

コンテンツタイプと継承対応マネージャによるモデル継承

django.dbからのモデルのインポートdjango.contrib.contenttypes.modelsからのモデルのインポートdjango.db.models.queryからのContentTypeのインポートQuerySet

クラスSubclassingQuerySet(QuerySet):def __getitem __(self、k):result = super(SubclassingQuerySet、self).__ getitem __(k)isinstance(result、models.Model)の場合:return result.as_leaf_class() self):superの中のアイテム(SubclassingQuerySet、self).__ iter __():yield item.as_leaf_class()

クラスMealManager(models.Manager):def get_query_set(self):戻り値SubclassingQuerySet(self.model)

クラスMeal(models.Model):名前= models.TextField(max_length = 100)content_type = models.ForeignKey(ContentType、編集可能= False、null = True)オブジェクト= MealManager()

def save(self、* args、** kwargs):if(self.content_typeではない):self.content_type = ContentType.objects.get_for_model(self .__ class__) )

def as_leaf_class(s​​elf):content_type = self.content_type model = content_type.model_class()if(model ==食事):selfを返しますmodel.objects.get(id = self.id)

クラスSalad(Meal):too_leafy = models.BooleanField(デフォルト= False)objects = MealManager()

  0  0


ベストアンサー

http://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes[抽象基本クラス]を使用できるようになったので、そのスニペットがまだ適切であるかどうかはわかりません。

これにより、dbテーブルではなく、他のモデルから継承できるモデルを宣言できます。

0


最初の答え:削除されたオブジェクトに対してなぜas_leaf_classを呼び出そうとしているのですか? あなたがそうするときにそれが痛いならば、それをしないでください。

2番目の答えは、Meal.DoesNotExistを除いて、失敗した行をtry …​でラップし、Noneまたはselfまたは何かを返すことができるということです。

0


タイトルとURLをコピーしました