Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Django/Postgres获取一个计算字段,如果存在,则获取字段值,如果没有其他字段值_Django_Postgresql_Django Queryset - Fatal编程技术网

使用Django/Postgres获取一个计算字段,如果存在,则获取字段值,如果没有其他字段值

使用Django/Postgres获取一个计算字段,如果存在,则获取字段值,如果没有其他字段值,django,postgresql,django-queryset,Django,Postgresql,Django Queryset,我有一个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)

我有一个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
,则可以使用:

在这里,
s将有一个额外的属性
。merge\u url
包含
url
的值,如果不存在,则包含
alt\u 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)

如果它可以为NULL或空呢?
Item.objects.annotate(
    merge_url=Coalesce('url', 'alt_url')
).values_list('merge_url', flat=True)