给出以下代码:
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()
Run Code Online (Sandbox Code Playgroud)
我现在想查询每个BaseMedium.
b = BaseMedium.objects.all()
Run Code Online (Sandbox Code Playgroud)
如何在不知道子类类型的情况下打印包括子类字段在内的所有信息?
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')
Run Code Online (Sandbox Code Playgroud)
但这个解决方案似乎很复杂,我认为你们有更好的解决方案.