我有一个Slug
模型来识别Page
个对象。 BlogPost
继承自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))
我知道InheritanceManager和select_subclasses(BlogPost)
,但我的查询是针对Slug
的,所以除非我查询{{1,否则我无法看到这会有所帮助用我的slug寻找Page
(这是一个更好的方法吗?)。
而不是过滤器我可以遍历所有slug结果并手动检查每一个。通过检查BlogPost
页面是否具有任何Slug
属性,the way to do this似乎是http://fmpp.sourceforge.net/qtour.html#sect4。最多只会有一些小块冲突需要筛选,很少会发生任何冲突。
我有没有办法让数据库查询为我做过滤?
答案 0 :(得分: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)
答案 1 :(得分:0)
Haven没有对此进行测试,但试一试:
AsyncTask