Django:按所有模型的pk查询
我需要通过主键查询多个表,这些主键是唯一的(uuids)。
我的想法是使用模型继承,这样可以一次性查询所有模型。我有一个基础模型叫BaseItem,其他所有模型都是这个BaseItem的子类。
但是,现在我的查询结果并没有我预期的那样。这里有一个示例模型:
from django.db import models
from django.contrib.auth.models import User
class BaseRev(models.Model):
rev_id = models.CharField(max_length=32, primary_key=True)
item_id = models.CharField(max_length=32, blank=True, null=True)
creation_date = models.DateTimeField()
class NamedRev(BaseRev):
name = models.CharField(max_length=64, blank=True, null=True)
description = models.CharField(max_length=256, blank=True, null=True)
creator = models.ForeignKey('UserProfile', related_name='namedrev_creator', blank=True, null=True)
当我创建一个NamedRev,主键为"1234",然后进行这样的查询:
BaseRev.objects.get(pk="1234")
我得到了一个主键正确的结果,但它的类型却是BaseItem。根据文档,这是正常的行为,因为rev_id字段只存在于BaseRev表中,而NamedRev表中有NamedRev的其他字段。
我该如何才能得到“正确的”完整的(包含所有字段)NamedRev对象呢?
谢谢,
Jan
3 个回答
0
你可以在你的基础模型里添加一个“类型”字段,这样你就可以查询这个基础模型,并且知道它的类型。在每个模型里重写 save()
方法,在保存之前设置好类型。
0
如果你把父类设置为抽象类,会发生什么呢:
class BaseRev(models.Model):
rev_id = models.CharField(max_length=32, primary_key=True)
item_id = models.CharField(max_length=32, blank=True, null=True)
creation_date = models.DateTimeField()
class Meta:
abstract = True
0
在你获取到你的 BaseRev 之后,接下来做:
>>> base_rev = BaseRev.objects.get(pk="1234")
>>> base_rev.namedrev
<NamedRev: NamedRev object>
把上面的内容赋值给另一个变量,这样你就可以访问 NamedRev 的字段了。