[英]Django how to filter queryset by a subclass using django model utils?
我使用django-model-utils來繼承Managers。 我想一次只獲得一個子類的結果。
managers.py
from model_utils.managers import InheritanceManager
class PostManager(InheritanceManager):
pass
models.py
from .managers import PostManager
class Post(models.Model):
title = models.CharField(max_length=20)
text = models.TextField()
objects = PostManager()
class ImagePost(Post, models.Model):
source = models.URLField()
image = models.ImageField(upload_to="images/%Y/%m/%d")
class VideoPost(Post, models.Model):
source = models.URLField()
我想返回只有圖像類型的結果。 通過編寫這樣一個更簡單的查詢。
Post.objects.filter(type='image').select_subclasses()
我嘗試過的:
if type == 'image':
Post.objects.filter(imagepost__isnull=False).select_subclasses()
這有效,但是有點反模式,我不想在視圖中為每種內容類型寫條件。
有沒有比在模型中定義屬性或將其轉換為管理器方法更好的方法? 還是我錯過了什么?
您是否嘗試將該類傳遞給select_subclasses
方法?
Post.objects.select_subclasses(ImagePost)
查看他們關於此功能的文檔 。
編輯:
我誤解了這個問題,但聽起來像OP只想要類型為ImagePost
的Post
。 執行select_subclasses(ImagePost)
將獲取所有內容並將具有ImagePost
類型的對象轉換為ImagePost
實例。 解決方案應該簡單如下:
image_posts = ImagePost.objects.all()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.