我有一个包含以下字段和装饰器的模型:
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
我在基于类的 View 中查询:
results = Items.objects.filter(title__icontains=query).order_by('-views')[offset:limit].values('id', 'url', 'title', 'vendor', 'thumb')
问题是对 values()
的调用返回数据库字段,据我所知,无法与属于 Items 模型的 @property 装饰器进行交互。
我需要 parsed_thumb()
的返回值。我有哪些选择?
最佳答案
查询集用于与数据库交互,而属性只能由模型访问。您可以使用 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')
关于python - 是否可以将模型的@property 装饰器与 Model.values() 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45862347/