Я использую фрагмент в http://www.djangosnippets.org/snippets/1034/ для моего наследования модели. Он отлично работает в первую очередь. Однако после удаления некоторых элементов в базе данных код работает неправильно. Как я отлаживаю, я обнаружил, что проблема заключается в методе: as_leaf_class. В следующем коде:Проблема в наследовании модели при удалении некоторых элементов
if (model == Meal):
return self
return model.objects.get(id=self.id)
последняя строка вызовет ошибку, когда элемент будет удален. Любой может дать решение для этого?
модель наследования с менеджером типа контента и наследственного-зависимые
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.db.models.query import QuerySet
class SubclassingQuerySet(QuerySet):
def __getitem__(self, k):
result = super(SubclassingQuerySet, self).__getitem__(k)
if isinstance(result, models.Model) :
return result.as_leaf_class()
else :
return result
def __iter__(self):
for item in super(SubclassingQuerySet, self).__iter__():
yield item.as_leaf_class()
class MealManager(models.Manager):
def get_query_set(self):
return SubclassingQuerySet(self.model)
class Meal (models.Model) :
name = models.TextField(max_length=100)
content_type = models.ForeignKey(ContentType,editable=False,null=True)
objects = MealManager()
def save(self, *args, **kwargs):
if(not self.content_type):
self.content_type = ContentType.objects.get_for_model(self.__class__)
super(Meal, self).save(*args, **kwargs)
def as_leaf_class(self):
content_type = self.content_type
model = content_type.model_class()
if (model == Meal):
return self
return model.objects.get(id=self.id)
class Salad (Meal) :
too_leafy = models.BooleanField(default=False)
objects = MealManager()
Пожалуйста, сообщите нам, какое исключение поднято. ObjecDoesNotExist? Может помочь трассировка стека. –