python - 是否可以将模型的@property 装饰器与 Model.values() 一起使用?

标签 python django django-models

我有一个包含以下字段和装饰器的模型:

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/

相关文章:

Python django-admin startproject mysite

python - Django QuerySet 对象没有属性 'objects

python - Django 如何根据一个查询中嵌套的多对多关系过滤查询集

python - Django 在 save() 方法之后插入新对象而不是更新

python - 从字符串构建 sqlalchemy 查询

python - 如何列出导入的模块?

python - 如果我必须为Python选择一个html抓取库,我应该选择哪一个

Django:为什么 __unicode__ 在打印(some_model_instance)期间不运行?

django - 将自定义表单参数传递给表单集

python - 安装 MySQL-Python 时出错