在Django Nonl中正确访问OneToOneField关系中的派生类

在Django Nonl中正确访问OneToOneField关系中的派生类,django,django-models,django-nonrel,Django,Django Models,Django Nonrel,我正在努力解决这个(但愿如此)简单的问题 我正在使用Django Nonl,我正在尝试设置一些模型。我已将代码简化如下: class Application(models.Model) name = "Application" def get_name(self): print(self.name) class ExampleApp(Application) name = "Example Application" class Site(models

我正在努力解决这个(但愿如此)简单的问题

我正在使用Django Nonl,我正在尝试设置一些模型。我已将代码简化如下:

class Application(models.Model)
    name = "Application"

    def get_name(self):
        print(self.name)

class ExampleApp(Application)
    name = "Example Application"

class Site(models.Model)
    app = models.OneToOneField(Application, null=True)
    id  = models.CharField(max_length=1)
    # other details not important
当我获得
Site
的实例时,我希望获得派生类的实例(例如
ExampleApp

类MyView(视图):
def get(自我、请求、*args、**kwargs):
#假设我有一个id=“a”的对象
site=site.objects.filter(id=“a”)
#
app=site.app
#返回“应用程序”,而不是“示例应用程序”
app.get_name()
如何访问派生类?


(理想情况下,我希望
Application
是一个抽象基类,但django不允许与抽象基类的关系。我会在
Application
中定义字段,但django nonrel不支持多表继承。)

如果没有其他django插件,这是不可能的。请看,lazerscience的答案建议使用访问此功能。

Furbeenator回答的是正确的,但我觉得我的(自我)答案对我这种情况下的任何人都更有价值

Django nonrel
包括一些不错的应用程序,值得注意的是
djangoolbox
djangoolbox
中包含一个特定字段,
EmbeddedModelField
。它似乎将模型副本作为blob存储在“容器”模型中

在我的例子中:

from djangotoolbox.fields import EmbeddedModelField

class Site(models.Model)
    app = EmbeddedModelField(null=True)
    id  = models.CharField(max_length=1)
    # other details not important

这样做的好处是,在我的情况下,这也意味着我可以将我的
应用程序
类抽象化。缺点是数据现在被复制了,我仍然无法从
应用程序
实例访问
站点
实例(但在我的情况下,这是一个可以接受的折衷)。

这看起来肯定是我感兴趣的。你知道这在Django Norel中是否有效吗?我还没有尝试过,但我想它会在Django Norel中有效,Django Norel只是NoSQL的一个实现,这应该与NoSQL支持无关。解决方案不太适用于当前的情况。多态模型在引用关系时似乎没有任何特殊作用。另外,如果我将基类设置为一个多态MetaClass,那么当我尝试向下转换时会出现一个错误:
非关系数据库不支持多表继承。
from djangotoolbox.fields import EmbeddedModelField

class Site(models.Model)
    app = EmbeddedModelField(null=True)
    id  = models.CharField(max_length=1)
    # other details not important