4

我有一个Slug模型来识别Page对象。ABlogPost继承自Page。我想找到一个BlogPost给定的Slug名字,但没有其他Page对象。

编辑:添加模型

class Slug(models.Model):
    name = models.CharField()
    page = models.ForeignKey('Page', null=True)

class Page(models.Model):
    slug = models.OneToOneField('Slug', related_name='primary_slug_set')
    content = models.TextField()

class BlogPost(Page):
    time = models.DateTimeField(auto_now_add=True, editable=False)

我想我追求的是这样的:

Slug.objects.get(name=slug_name).filter(page=subclass_of(BlogPost))

我知道InheritanceManagerselect_subclasses(BlogPost)但我的查询是 for Slug,所以我看不到这有帮助,除非我用我的 slug 查询Page并寻找BlogPosta (这是更好的方法吗?)。

而不是过滤器,我可以遍历所有 slug 结果并手动检查每个结果。似乎这样做的方法是检查Slug' 页面是否有任何BlogPost属性。最多只会有一些蛞蝓冲突需要筛选,而且很少有。

有没有办法让数据库查询为我做过滤器?

4

2 回答 2

0

如果您的 Slug 模型通过以下方式定义与 Pages 的关联:

class Slug(models.Model):
...
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    page = generic.GenericForeignKey('content_type', 'object_id')

然后,您的查询应如下所示:

content_type = ContentType.objects.get_for_model(BlogPost)
Slug.objects.filter(name=slug_name, content_type__pk=content_type.id)
于 2015-05-23T13:20:06.387 回答
0

尚未对此进行测试,但请尝试一下:

Slug.objects.filter(name=slug_name, blogpost__isnull=False)
于 2015-05-23T18:25:14.413 回答