【问题标题】:SQL to Django TranslationSQL 到 Django 的翻译
【发布时间】:2021-06-08 23:27:33
【问题描述】:

此语句在 SQL 中有效,我只是不知道如何将其转换为 django。我确定它使用了 prefetch_related、Prefetch 或 select_related,但我仍然很难理解这些概念。我确实看到预取基本上必须有该表下的字段。

我的目标:并非所有品牌都有产品。所有产品都有品牌。用产品展示我唯一的品牌。我希望实现Brand.objects.[insert-filter-here]

Model.py(实际 models.py 文件的附加版本)

class Product(models.Model):
    brand = models.ForeignKey(Brand)

class Brand(models.Model):
    name = models.CharField

SQL

SELECT DISTINCT products_brand.name FROM produts_brand INNER JOIN products_product on products_brand.id=products_product.brand_id;

它有 2 个表,因为 products 表有很多列 (27),我想另一个选择是 将它们结合起来。但我希望更好地控制 Brand 对象,以便于查找/编辑。

非常感谢您的帮助!

【问题讨论】:

标签: mysql django django-queryset


【解决方案1】:

应该只是Brand.objects.filter(product__isnull=False).distinct()。您可以使用默认反向名称(如果您在声明 ForeignKeyField 时使用 related_query_name 字段参数指定一个名称,则可以使用其他名称)向后跟踪外键关系。

如果没有distinct(),您可能会得到重复的条目。

有关更多详细信息和示例,请参阅"Lookups that span relationships" 文档。

【讨论】:

【解决方案2】:

谢谢各位!我没有提到我使用的是 MYSQL 后端而不是 SQLite,但 Peters 的回答让我朝着正确的方向前进,我明白了。

Brand.objects.values('name').distinct().filter(products__isnull=False)

【讨论】:

    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2017-07-12
    相关资源
    最近更新 更多