如何向Django Querysets和Merg添加临时属性

2024-09-29 23:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我试图向来自同一模型的两个独立的查询集添加一个临时属性,但似乎只要我尝试将它们合并在一起,新字段就会消失。在

示例:

class IndexView(View):
    def get(self, request):
        q1 = MyModel.objects.filter(points=0)
        q2 = MyModel.objects.filter(points=100)

        for q in q1:
            q.title = 'Loser'
            print(q.title)  # Prints 'Loser'

        for q in q2:
            q.title = 'Winner'
            print(q.title)  # Prints 'Winner'

        q = q1 | q2  # Merges the two QuerySets together

        for item in q:
            print(item.title)  # ERROR: "Title" is not a field anymore apparently...

        return render(request, 'index.html', {})

我尝试过另一种方法,它使用.chain()(在另一个线程中提到),但是它将类型从QuerySet更改为{},这是我不想要的。我会把它贴在下面。有什么方法可以在获得相同结果的同时保持列表作为查询集?请注意,我希望title属性是临时的,这样我就可以在模板中分隔项目。而且,points过滤器不是实际的过滤器,实际上要复杂得多,因此模板标记和模型方法不是一个选项。在

^{pr2}$

Django v1.9.6Python v3.4.3


Tags: 方法in模型for属性objectstitlerequest
1条回答
网友
1楼 · 发布于 2024-09-29 23:18:37

你不可能做到这一点,因为当你这样做的时候:

q = q1 | q2

您正在执行一个新的数据库查询。没有直接的方法,只能一起查询,然后分别标记:

^{pr2}$

考虑到关于points的复杂情况,您还可以为模型MyModel创建一个方法,然后调用该函数返回一个类似于将title分配给它的值。在

相关问题 更多 >

    热门问题