Django 删除某些元素时模型继承中出现问题
我在模型继承中使用了一个代码段。它一开始工作正常。然而,在我删除了数据库中的一些元素之后,代码就错了。 在调试过程中,我发现问题在于方法:As_leaf_类。 在以下代码中:Django 删除某些元素时模型继承中出现问题,django,inheritance,model,Django,Inheritance,Model,我在模型继承中使用了一个代码段。它一开始工作正常。然而,在我删除了数据库中的一些元素之后,代码就错了。 在调试过程中,我发现问题在于方法:As_leaf_类。 在以下代码中: if (model == Meal): return self return model.objects.get(id=self.id) 删除元素时,最后一行将引发异常。 有人能给出一个解决方案吗 具有内容类型和继承感知管理器的模型继承 from django.db import models from djan
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()
我不知道这个片段现在是否仍然相关,您可以使用它
这允许您声明一个不是db表的模型,但其他模型可以从中继承。第一个答案:为什么要在已删除的对象上调用as\u leaf\u类?如果你那样做很痛,就不要这样做
第二个答案是,您可以用try…except-fine.DoesNotExist来包装失败的行,并返回None或self或其他内容。请告诉我们引发了什么异常。反对者?堆栈跟踪可能会有所帮助。仍然有基于表的模型继承的用例(如果你问我的话,虽然不是很多)。