【问题标题】:How to use @property in raw sql or add alias for the django ORM query如何在原始 sql 中使用 @property 或为 django ORM 查询添加别名
【发布时间】:2017-03-26 05:13:35
【问题描述】:

我使用这样的 SQL 查询:

        SELECT ns.id, ns.title, ns.image, 
               ns.briefDescr as description, ns.url, 
               um.team_id as team
        FROM app_news ns
          INNER JOIN app_news_teams nsts
            ON ns.id = nsts.news_id
          INNER JOIN app_userteam um
            ON nsts.team_id = um.team_id
        WHERE um.user_id = %s AND ns.isActive = 1 GROUP BY ns.id
        ORDER BY ns.id DESC

但我需要为“图像”字段添加更多逻辑,我决定在模型中使用装饰器@property:

@property
def image(self):
    '''some logic here'''
    return self._image

但是现在 sql 代码不起作用。我还尝试添加注释以添加“um.team_id 作为团队”。您能否给我一些想法,我可以使用@property 并保存 sql 响应的当前结构(id、title、image、url、description 和 team)吗?

编辑: 1)我在视图中运行查询作为原始查询。

articles = News.objects.raw(sql, [sid, ])

结果我想执行 sql 查询或 orm 查询并保存当前的响应结构,但使用函数字段 'image'

2)当我运行这个 sql 时出现异常“ns.image”不存在

# model before
class News(models.Model):
"""other fields """
    image = models.ImageField(upload_to='images/news', blank=True)

# model now
class News(models.Model):
"""other fields """
    _image = models.ImageField(upload_to='images/news', blank=True)

    @property
    def image(self):
        """some logic here"""
        return self._image

【问题讨论】:

  • 您的问题含糊不清。您的 sql 查询在哪里执行?为什么添加@property 会影响查询?除非你指出这一点,否则它们对我来说只是两个完全不同的东西。
  • 我在问题中添加了更多细节。

标签: sql django python-2.7 django-models


【解决方案1】:

因此不可能使用 sql 而不是带有 @property 的 orm 查询。为了保存相同的响应结构,我通过使用 @property 添加所需的值来更改模型,例如:

@property
def team(self):
    # get team...
    return team

【讨论】:

    猜你喜欢
    • 2018-05-15
    • 2019-08-05
    • 2022-08-18
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2020-08-28
    相关资源
    最近更新 更多