簡體   English   中英

Django如何使用django model utils通過子類過濾queryset?

[英]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只想要類型為ImagePostPost 執行select_subclasses(ImagePost)將獲取所有內容並將具有ImagePost類型的對象轉換為ImagePost實例。 解決方案應該簡單如下:

image_posts = ImagePost.objects.all()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM