我有一个包含以下字段和装饰器的模型:
class Item(models.Model):
title = models.CharField(db_index=True, max_length=100)
thumb = models.CharField(max_length=1000)
vendor = models.CharField(max_length=15)
url = models.CharField(max_length=255, unique=True)
views = models.CharField(max_length=64)
@property
def parsed_thumb()
return = self.url + "/static/" + self.thumb
我在基于类的视图中查询:
results = Items.objects.filter(title__icontains=query).order_by('-views')[offset:limit].values('id', 'url', 'title', 'vendor', 'thumb')
问题是调用values()
返回db字段,据我所知,无法与属于Items模型的@property装饰器进行交互。
我需要parsed_thumb()
的返回值。我有什么选择?
答案 0 :(得分:2)
Querysets可以与数据库进行交互,其中属性只能由模型访问。您可以使用Concat注释属性以使用查询集,但这不会使用该属性
results = Items.objects.filter(title__icontains=query).order_by('-views')
results = results.annotate(parsed_thumb=Concat('url', Value('/static/'), 'thumb'))[offset:limit].values('id', 'url', 'title', 'vendor', 'thumb', 'parsed_thumb')
答案 1 :(得分:1)
如果您使用这种简单的方法,可以尝试使用QuerySet.extra
results = Items.objects.extra(
select={'parsed_thumb': "url || '/static/' || thumb"}
).filter(title__icontains=query).order_by('-views')[offset:limit].values(
'id', 'url', 'title', 'vendor', 'thumb', 'parsed_thumb')