neo*_*ser 7 python django django-models
我有两个型号Category和Entry.还有另一种ExtEntry继承的模型Entry
class Category(models.Model):
title = models.CharField('title', max_length=255)
description = models.TextField('description', blank=True)
...
class Entry(models.Model):
title = models.CharField('title', max_length=255)
categories = models.ManyToManyField(Category)
...
class ExtEntry(Entry):
groups= models.CharField('title', max_length=255)
value= models.CharField('title', max_length=255)
...
Run Code Online (Sandbox Code Playgroud)
我可以使用Category.entry_set但我希望能够做到,Category.blogentry_set但它不可用.如果这不可用,那么我需要另一种方法来使所有ExtEntry与一个特定相关Category
编辑我的最终目标是拥有一个ExtEntry对象的QuerySet
谢谢
我需要另一种方法来获取与一个特定类别相关的所有 ExtEntry
简单的:
ExtEntry.objects.filter(categories=my_category)
Run Code Online (Sandbox Code Playgroud)
你知道是否有办法使用继承的 _set 功能
我不知道他们是否有直接的。文档中没有提到它。
但用 可以得到类似的结果select_related。
for e in category.entry_set.select_related('extentry'):
e.extentry # already loaded because of `select_related`,
# however might be None if there is no Extentry for current e
Run Code Online (Sandbox Code Playgroud)
可以仅选择具有 ExtEntry 的条目:
for e in category.entry_set.select_related('extentry').exlude(extentry=None):
e.extentry # now this definitely is something, not None
Run Code Online (Sandbox Code Playgroud)
排除的坏处是它会生成极其低效的查询:
SELECT entry.*, extentry.* FROM entry
LEFT OUTER JOIN `extentry` ON (entry.id = extentry.entry_ptr_id)
WHERE NOT (entry.id IN (SELECT U0.id FROM entry U0 LEFT OUTER JOIN
extentry U1 ON (U0.id = U1.entry_ptr_id)
WHERE U1.entry_ptr_id IS NULL))
Run Code Online (Sandbox Code Playgroud)
所以我的简历是:用来ExtEntry.objects.filter()获取结果。向后关系(object.something_set)只是一种方便,并不适用于所有情况。
| 归档时间: |
|
| 查看次数: |
6330 次 |
| 最近记录: |