我有这个型号:
from django.db import models
class Item(models.Model):
# ...
def __str__(self):
return 'item'
class SubItemA(Item):
# ...
def __str__(self):
return 'subitem_a'
class SubItemB(Item):
# ...
def __str__(self):
return 'subitem_b'
我想从Item.object.all()中的每个Item调用 __ str __ 方法并返回每个子类实现,但它只返回超类实现。
示例:
for item in Item.object.all():
print(item.__str__())
在我的数据库中,我有两个SubItemA和两个SubItemB。比它返回:
item
item
item
item
我想有这样的事情:
subitem_a
subitem_a
subitem_b
subitem_b
我迷失在这里。
答案 0 :(得分:1)
有点牵扯。您可以查看Django model subclassing: Get the subclass by querying the superclass进行完整讨论。
简短的回答,来自那个问题:
def related_object(self, default_pointer_name='_ptr'):
models = [A,B] #models
object = None
argument = '%s%s' %(self.__class__.__name__.lower(), default_pointer_name)
query = { argument : self}
for model in models:
try:
object = model.objects.get(**query)
except model.DoesNotExist:
pass
else:
return object
if object == None:
raise RelatedObjectException
return object
# This is a method used by BaseMedium.
答案 1 :(得分:0)
有了这个,你就会遇到更多问题。没有重新发明轮子的干净解决方案是使用Django Polymorphic
之类的东西