django 对查询集中的特定字段运行特定函数

wa7juj8i  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(100)

我试图在查询集中的特定字段上运行一个函数,然后将其发送到模板进行渲染。
我有以下模型。

class Customer(models.Model):
    name = models.CharField(max_length=255)

class Device(models.Model):
    cid = models.ForeignKey(Customer, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    oid = models.TextField(null=True)

我有以下观点,我试图在oid的queryset字段上运行checkStatus函数,但每次运行时都会得到以下错误,“info”是checkStatus函数返回的值。

错误

TypeError: QuerySet.annotate() received non-expression(s): info.

views.py(示例网站)

def device_detail(request, cid):
    customers = models.Customer.objects.all()

    customer_details = get_object_or_404(models.Customer, id=cid)
    device_details = customer_details.device_set.all()
    device_details.annotate(checkStatus("oid"))

    return render(request, 'devices/detail.html', {
        'device_details': device_details
    })
qpgpyjmq

qpgpyjmq1#

您对annotate()方法的使用似乎不正确。您应该查看有关annotate()方法的文档
由于你还没有展示关于你的函数checkStatus()的代码,我不确定我的建议,但我猜这应该作为一个示例方法而不是一个自由函数实现。可能是这样的:

class Device(models.Model):
    cid = models.ForeignKey(Customer, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    oid = models.TextField(null=True)

    def checkStatus(self):
        if self.oid == 'something':
            return 'ok'
        return 'ko'

只是个想法

相关问题