【问题标题】:Django ORM simple JoinDjango ORM 简单加入
【发布时间】:2019-08-12 07:10:41
【问题描述】:

我想像这样执行简单的连接操作。

原始 SQL:select * from risks r join sku_details s on r.sku_id = s.sku_id;

型号详情:

class SkuDetails(models.Model):
    sku_id = models.DecimalField(primary_key=True, max_digits=65535, decimal_places=65535)
    sku_desc = models.TextField(blank=True, null=True)
    category = models.TextField(blank=True, null=True)



class Risks(models.Model):
    risk_id = models.DecimalField(primary_key=True, max_digits=65535, decimal_places=65535)
    risk_group_short_desc = models.TextField(blank=True, null=True)
    risk_group_desc = models.TextField(blank=True, null=True)
    var = models.DecimalField(max_digits=65535, decimal_places=65535, blank=True, null=True)
    sku = models.ForeignKey(SkuDetails, models.DO_NOTHING, blank=True, null=True)

加入后,我希望通过 Django ORM 将两个表的所有列都放在平面结构中... 在原始 SQL 中,我将获得所有列......但不是从 ORM 获得

请帮忙!!!

【问题讨论】:

  • 你实际上并不想要这个。使用 ORM 的全部意义在于它为您提供对象,而不是值列表。

标签: django django-models django-orm


【解决方案1】:

使用values() 可以很容易地获取字典列表中的所有值:

Risks.objects.values(
    'risk_id',
    'risk_group_short_desc`,
    # ... fields you need from Risks
    'sku__sku_id',
    # ... fields you need from SkuDetails
)

您也可以查看values_list()

【讨论】:

  • 有没有办法...我不必添加所有列...默认情况下它会给我对象中的所有相关列。?
  • 如果您需要相关领域,我相信。 values() 不带参数为您提供所有字段,但仅在查询模型中。
【解决方案2】:

您可以使用select_related 试试这个。相关帮助material 作为具有外键关系的两个模型。

【讨论】:

  • 与 select_related .. 正在获得嵌套结果...我想要平坦的结果。有什么方法可以得到吗?
  • 然后@NikunjAggarwal 你需要使用value_list @Endre Both 所说的。
猜你喜欢
  • 2014-08-30
  • 2014-02-11
  • 1970-01-01
  • 2020-03-11
  • 2012-03-28
  • 2020-05-26
  • 2014-05-19
  • 2022-01-21
  • 1970-01-01
相关资源
最近更新 更多