J'utilise un extrait dans http://www.djangosnippets.org/snippets/1034/ pour l'héritage de mon modèle. Cela fonctionne bien au premier. Cependant, après avoir supprimé certains éléments dans la base de données, le code fonctionne mal. Au cours du débogage, j'ai trouvé que le problème résidait dans la méthode: as_leaf_class. Dans le code suivant:Problème dans l'héritage du modèle lorsque certains éléments sont supprimés
if (model == Meal):
return self
return model.objects.get(id=self.id)
la dernière ligne soulèvera exception lorsque l'élément est supprimé. Quelqu'un pourrait-il donner une solution à cela?
héritage du modèle avec le gestionnaire de type de contenu et connaître l'héritage
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()
Veuillez nous dire quelle exception est soulevée. ObjecDoesNotExist? Une trace de pile pourrait aider. –