我已经使用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' !!!!!
当我以不同的方式访问明显相同的数据时,我怎么会得到不同的结果?
我的数据库是否损坏或者我缺少一些基本的东西?