Django .objects,获取来自不同模型的合并查询集

Django .objects,get for merged querysets from different models

我有一个抽象基础模型 ('Base'),两个模型从中继承:'Movie' 和 'Cartoon'。我向用户显示电影和卡通片的列表(在 itertools.chain 的帮助下)。然后我想让用户有机会删除这些项目中的任何一个,而无需事先知道它是电影还是卡通。我正在尝试这样做:

        ...

        movies = Movie.objects.filter(user_created=userlist).order_by('title')
        cartoons = Cartoon.objects.filter(user_created=userlist).order_by('title')

        all_items = list(chain(movies, cartoons))

        item = all_items.get(id=item_id)
        item.delete()

但是 PyCharm 说,

Unresolved attribute reference 'get' for class 'list'

我明白为什么会这样,但我不知道如何避免。有什么方法可以合并来自不同模型的两个查询集并应用 get 或 filter 而无需删除抽象基础模型和创建物理父模型?

您可以先使用index() 方法找到索引,然后可以通过all_items[given_index].delete()

获取项目

您可以使用 ContentTypes framework 为任意数量的不同模型提供通用且可重复使用的解决方案。但我也想知道为什么 CartoonMovie 必须是不同的类型;可能值得花一点时间考虑是否可以对两种类型的媒体使用单一模型 - 删除任意实例只是单一模型比依赖 ContentTypes 之类的东西更直接的许多情况之一。

编辑:有关 ContentType 的更多信息。您可以创建具有通用关系的基本模型(您说过您不想这样做),或者对于删除,您可以在请求数据中包括应用标签和模型名称以及项目 ID,从而启用如下查找:

    media_type = ContentType.objects.get(app_label=app_label, model=model_name)
    instance = media_type.get_object_for_this_type(id=item_id)
    instance.delete()

这种方法的优点在于您几乎不必更改模型结构。