【发布时间】:2010-06-24 11:23:17
【问题描述】:
给出以下代码:
class BaseMedium(models.Model):
title = models.CharField(max_length=40)
slug = models.SlugField()
class A(BaseMedium):
url = models.URLField()
class B(BaseMedium):
email = models.EmailField()
我现在想查询每个 BaseMedium。
b = BaseMedium.objects.all()
如何在不知道子类类型的情况下打印包括子类字段在内的所有信息?
如果b[0] 实际上与A 实例相关,则b[0].a 将打印信息,但如果它与B 相关,它将打印DoesNotExist 异常。
这是有道理的,但我想要一个返回相关对象的公共变量或方法。
也许我的数据库布局不太适合以这种方式查询,如果您能推荐一个更好的布局,我会很高兴。
我考虑过使用GenericForeignKey
class Generic(models.Model):
basemedium = models.ForeignKey('BaseMedium')
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
但是这个解决方案似乎很复杂,我认为你们有更好的解决方案。
【问题讨论】:
标签: python django django-models