gpt4 book ai didi

python - Django ForeignKey _set 在继承的模型上

转载 作者:太空狗 更新时间:2023-10-29 21:47:48 24 4
gpt4 key购买 nike

我有两个模型 CategoryEntry。还有一个模型 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)
...

我可以使用 Category.entry_set 但我希望能够使用 Category.blogentry_set 但它不可用。如果这不可用,那么我需要另一种方法来获取与一个特定的 Category

相关的所有 ExtEntry

编辑我的最终目标是拥有一个 ExtEntry 对象的 QuerySet

谢谢

最佳答案

I need another method to get all ExtEntryrelated to one particular Category

简单:

ExtEntry.objects.filter(categories=my_category)

Do you know if there is a way to use the _set feature of an inherited

我不知道他们是否有直接的指示。文档中未提及。

但是使用 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

可以只选择具有 ExtEntry 的条目:

for e in category.entry_set.select_related('extentry').exlude(extentry=None):
e.extentry # now this definitely is something, not None

exclude 的坏处是它会生成非常低效的查询:

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))

所以我的简历将是:使用 ExtEntry.objects.filter() 获取结果。向后关系 (object.something_set) 只是一种方便,并非在所有情况下都有效。

关于python - Django ForeignKey _set 在继承的模型上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4856887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com