通过查询或 ORM 访问 Django 多态模型时的不同结果

问题描述

我一直在使用 Django's model polymorphism 一段时间没有问题,但我突然遇到了一些事情,这让我怀疑我对它的工作原理的基本理解。

这基本上是我的设置方式。

from django.db import models
from polymorphic.models import polymorphicModel


class Data(polymorphicModel):
    parent = models.ForeignKey('Data',null=True,blank=True,on_delete=models.CASCADE)


class Listing(Data):
    name = models.CharField(max_length=128)

    def __str__(self):
        return '%s (%d)' % (self.name,self.id)


class Qualification(Data):
    target_listing = models.ForeignKey(Listing,on_delete=models.SET_NULL,null=True)


class Job(models.Model):
    data = models.ForeignKey(Data,on_delete=models.CASCADE,related_name="job_data")

长话短说,乔布斯可以随身携带数据,目前有两种类型:资格和上市。资格本身可以指向一个列表。

我突然注意到在管理站点中,一个特定的 Qualification 实例没有设置其目标列表,所以我输入了一些打印语句并发现了这一点。

q = job.data
print("job.data.id",job.data.id)                          // Yields 'job.data.id 20'
print("q.id",q.id)                                        // Yields 'q.id 20'
print("job.data.target_listing",job.data.target_listing)  // Yields 'job.data.target_listing myListing (12)'
print("q.target_listing",q.target_listing)                // Yields 'q.target_listing myListing (12)'
qq = Qualification.objects.get(id=q.id)
print("qq.target_listing",qq.target_listing)              // Yields 'qq.target_listing None' !!!!!

当我以不同的方式访问看似相同的数据时,怎么会得到不同的结果?

是我的数据库损坏了还是我遗漏了一些基本的东西?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...