gpt4 book ai didi

django - 使用 Django/Postgres 获取一个计算字段,如果不存在另一个字段值,则获取一个字段值

转载 作者:行者123 更新时间:2023-11-29 13:12:32 35 4
gpt4 key购买 nike

我有一个 Django 模型:

Item(models.Model):

url = models.URLField(blank=True, null=True)
alt_url = models.URLField(blank=True, null=True)

我想在数据库中做一个选择以获得一个新变量,如果 url 存在,它将具有 url 的值,如果不存在,则获得 alt url 的值

在伪代码中:

'SELECT url=(url if url exist else alt_url) from item'

最佳答案

如果“不存在”是指 NULL,则可以使用 Coalesce function [Django-doc] :

from django.db.models.functions import Coalesce

Item.objects.annotate(
merge_url=Coalesce('url', 'alt_url')
)

这里的 Item 将有一个额外的属性 .merge_url 包含 url 的值,或者如果不存在,则alt_url 的值。

话虽这么说,对于一个非常简单的案例,向您的模型添加一个属性可能会更好:

Item(models.Model):

url = models.URLField(blank=True, null=True)
alt_url = models.URLField(blank=True, null=True)

@property
def merge_url(self):
return self.url or self.alt_url

或者如果你只对这些值感兴趣,你可以这样写:

Item.objects.annotate(
merge_url=Coalesce('url', 'alt_url')
).values_list('merge_url', flat=True)

关于django - 使用 Django/Postgres 获取一个计算字段,如果不存在另一个字段值,则获取一个字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53130208/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com