0

我已经使用Django 的模型多态性一段时间了,但我突然遇到了一些问题,这让我质疑我对它如何工作的基本理解。

这基本上是我如何设置的。

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, blank=True, 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' !!!!!

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

我的数据库是否损坏或者我缺少一些基本的东西?

4

0 回答 0