我有一个名为WCA和识别符的2个模型Django项目,我想更新从WCA模型中的等效字段从识别符模型中提取的代码匹配WCA模型中的ISIN字段的识别符模型中称为‘secid’的字段.

Models

class Identifier(TimeStampMixin, models.Model):
    secid = models.IntegerField(default=0, db_index=True)
    code_type = models.CharField(max_length=10, null=True)
    code = models.CharField(max_length=12, db_index=True)
    account = models.ForeignKey(Account, on_delete=models.CASCADE, null=True)

    def __str__(self):
        return self.code
        
        
class Wca(models.Model):
    secid = models.IntegerField(blank=False, null=False, db_index=True)
    isin = models.CharField(max_length=12, blank=True, db_index=True)
    uscode = models.CharField(max_length=9, blank=True, db_index=True)
    sedol = models.CharField(max_length=7, blank=True, db_index=True)
    
    def __str__(self):
        return str(self.secid)  

我有这方面的工作的SQL代码,但想转换成Django等价的最佳实践.我的SQL查询如下:

    UPDATE portfolio_identifier
    left outer join product_wca on portfolio_identifier.code = product_wca.isin
    SET
    portfolio_identifier.SecID = product_wca.secid
    WHERE
    code_type = 'ISIN';

在这件事上如果能帮上忙我会很感激.谢谢

推荐答案

这应该适用于模型和字段名称中的一些更改.

from django.db.models import OuterRef, Subquery

Identifier.objects.filter(code_type='ISIN').update(
    secid=Subquery(
        Wca.objects.filter(
            isin=OuterRef('code')
        ).values('secid')
    )
)

Mysql相关问答推荐

如果WHERE语句包含所有列,唯一键顺序是否重要?

SQL/Pyspark -判断条件

将 Cloud Function (nodejs) 连接到 CloudSQL mySQL 数据库

如何本地化 MySQL 表中的实体?

「已解决」MySQL 连接在 vb6 上出现运行时错误 -2147467259 (80004005),但在 VBA Excel 上工作

如何在 axios 请求中将更新的设置状态值作为参数传递

Select 分组产品的数量和每个产品的最便宜的价格

即使使用索引,MySQL 计数和按查询分组也很慢

MYSQL REGEXP_REPLACE 在数字之后

如何使用同一个表在 2 个字段上左连接

查询mysql中无法识别数据值

基于两个单元格值的 SQL 过滤表

如何查看打开了多少 MySQL 连接?

Laravel classloader.php 错误打开流失败:没有这样的文件或目录

mysql 按日期 Select 总和组

基于字符串动态创建 PHP 对象

MySQL 整数与日期时间索引

MySQL - 在 MySQL UPDATE 或 SELECT 查询中使用 If Then Else

来自 MySQL 中多个表的 COUNT(*)

mysql GROUP_CONCAT 重复