首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:所有机型按主键查询

Django:所有机型按主键查询
EN

Stack Overflow用户
提问于 2011-09-15 04:29:51
回答 3查看 378关注 0票数 1

我需要通过primary_keys跨多个表进行查询,这些表是唯一的(Uuid)。

我的想法是使用模型继承来一次查询所有模型。我有一个BaseItem,所有其他模型都是这个BaseItem模型的子类。

现在,我的查询没有返回我所期望和需要的内容。下面是一个示例模型:

代码语言:javascript
复制
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)

当我创建一个pk = "1234“的NamedRev并进行如下查询时

代码语言:javascript
复制
BaseRev.objects.get(pk="1234")

我得到的结果是正确的pk,但它的类型是BaseItem。根据文档,这是正确的行为,因为rev_id字段只存在于BaseRev表中,NamedRev的附加字段存在于NamedRev表中。

对于给定的查询,如何获取NamedRev类型的“正确”和完整(包含所有字段)对象?

干杯,

1月

EN

回答 3

Stack Overflow用户

发布于 2011-09-15 04:39:58

如果您将父类设置为抽象类,会发生什么:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-09-15 10:25:05

获取BaseRev后,执行以下操作:

代码语言:javascript
复制
>>> base_rev = BaseRev.objects.get(pk="1234")
>>> base_rev.namedrev
<NamedRev: NamedRev object>

将上述内容赋给另一个变量,您应该能够访问NamedRev的字段。

票数 0
EN

Stack Overflow用户

发布于 2013-01-09 20:18:59

您可以在基础模型中插入" type“字段,这样就可以查询基础模型,然后询问它的类型。覆盖每个模型的save()方法,在保存前设置类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7422605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档