使用ForeignKey、Django Subquery 和 OuterRef 将一个模型中的字段合并到另一个模型中

2024-01-10

我有两个模型,RetailLocation 和 Transaction,它们分别共享一对多关系。我的目标是用日期注释 RetailLocationlatest与该 RetailLocation 对应的交易。

模型 Transaction 包含“r_loc_name”,它与 RetailLocation.name 完全相同。我认为这个字段是多余的,并且我希望有一个更好的解决方案,仅使用 RetailLocation 中的 r_loc 外键(和设置),但是我还没弄清楚如何。

Models

class RetailLocation(models.Model):
    name = models.CharField(max_length=200, null=True)

class Transaction(models.Model):
    date = models.DateTimeField(null=True)
    r_loc = models.ForeignKey(RetailLocation, null=True, on_delete=models.SET_NULL)
    r_loc_name = models.CharField(max_length=200, null=True) # Likely redundant

尝试的代码

loc_latest = RetailLocation.objects.all().annotate(                              
    latest_txn_time=Subquery(                                                    
        Transaction.objects.filter(r_loc_name=OuterRef("name"))                  
        .order_by("date")                                                        
        .values("date")                                                          
        .last()                                                                  
    )                                                                            
)

另一种尝试

loc_latest = RetailLocation.objects.all().annotate(                              
    latest_txn_time=Value(                                                                
        Subquery(                                                                
            RetailLocation.objects.get(name=OuterRef("name"))               
            .transaction_set.order_by("date")                                    
            .last()                                                              
            .date                                                                
        ),                                                                       
        DateTimeField(),                                                         
    )                                                                            
)

我的目标是引用 RetailLocation.latest_txn_time,这将是引用该 RetailLocation 的最新交易的带注释的日期时间。

非常感谢


您可以与OuterRef在主键上,并使用slicing ([:1]) 获取最后一项,因此:

loc_latest = RetailLocation.objects.annotate(
    latest_txn_time=Subquery(
        Transaction.objects.filter(
            r_loc=OuterRef('pk')
        ).order_by('-date').values('date')[:1]
    )
)

The r_loc_name确实是多余的。为一个Transaction您可以使用的对象my_transaction.r_loc.name,您可以使用以下方法进行过滤等Transaction.objects.filter(r_loc__name='some-name').

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用ForeignKey、Django Subquery 和 OuterRef 将一个模型中的字段合并到另一个模型中 的相关文章

  • Django 自定义文件存储系统

    我有一个自定义存储 import os from django core files storage import Storage class AlwaysOverwriteFileSystemStorage Storage def get
  • Python用Django请求Post请求数据

    我正在尝试向一个非常简单的 django 服务器发送一个简单的 post 请求 但无法理解为什么 post 数据没有出现在 requests post 字典中 而是出现在请求正文中 客户端代码 payload test test heade
  • Django 还原不保存在 shell 中所做的修订

    我做了初始安装 https github com etianen django reversion wiki步骤并创建了初始修订版 但是当我在 django shell 中保存模型时 未创建新修订版 In 1 s Shop objects
  • Django:使用 Django ORM 实现 JOIN?

    我有一个用 Django 构建的问答类型的网站 具有以下模型 class Question models Model title models CharField max length 70 details models TextField
  • 如何使用 Django 项目设置 SQLite?

    我已阅读 Django 文档 仅供参考 https docs djangoproject com en 1 3 intro tutorial01 https docs djangoproject com en 1 3 intro tutor
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可
  • 限制 Django 中的暴力登录攻击 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否有普遍接受的策略来保护 Django 应用程序免受此类攻击 有很多可用的库 例如Django 斧头 Django 防御者 Djan
  • Django LoginForm 中间件打破了基于类的视图

    据几其他答案 https stackoverflow com questions 2734055 putting a django login form on every page 我使用中间件在项目的每个页面上显示登录表单 以便用户可以就
  • 让 Pytest 在 Django cookiecutter / Python 3.x 项目中运行

    我正在建造一个新的cookiecutter django https github com pydanny cookiecutter django项目 这里有本地设置说明 http cookiecutter django readthedo
  • 配置 Django 和 Google 云存储?

    I am not使用应用引擎 我有一个在虚拟机上运行的普通 Django 应用程序 我想使用 Google Cloud Storage 来提供静态文件 以及上传 提供媒体文件 我有一个水桶 如何将 Django 应用程序链接到我的存储桶 我
  • Django admin:通过 URL 传递变量

    我想通过 URL 将变量传递到 django admin 中的另一个页面 看起来它不起作用 我想传递变量 name hello 并通过request GET get name 捕获它 但是url变成 e 1 经过之后 如果我使用默认参数 q
  • 具有模型目录和AUTH_USER_MODEL

    I have myApp models profiles py代替myApp models py 对相关模型进行分组 你怎么设置AUTH USER MODEL在这种情况下 因为 auth 只接受 foo bar 模式 app label m
  • Pinax:自定义注册和个人资料

    我想在用户注册时收集更多信息 并将其显示为个人资料信息的一部分 以便用户在创建登录后可以对其进行编辑 如何在不直接更改 pinax 代码的情况下扩展注册和个人资料表单和模型 来自 松树docs http pinaxproject com d
  • 在 Django 中使用 prefetch_lated 连接 ManyToMany 字段

    我可能遗漏了一些明显的东西 但我在连接 ManyToMany 字段以在 Django 应用程序中工作时遇到问题 我有两个模型 class Area models Model name CharField class Role models
  • 具有内联模型的 Django 管理页面加载速度非常慢

    我有一个带有单个内联模型的模型的 Django 管理页面 当内联模型有很多项目 例如 75 个 时 页面加载速度非常慢 大约 30 秒 即使我排除内联模型上的所有字段 让它只渲染名称 情况也是如此 删除内联模型会导致页面加载速度非常快 以秒
  • django 保护用户上传的文件

    如何允许用户将文件上传到他们自己的用户指定的文件夹 并且只能看到他们已上传的文件 我正在使用 django 文件传输 目前 它让我可以选择将媒体放入哪个文件 但我可以将其放入任何用户的文件中并查看每个用户的媒体 这是我的 uploads m
  • Django 评论和评级系统

    我正在寻找一个可以与我的 Django 网站顺利集成的博客和评论系统 我在网上发现了很多 但有点迷失了 我在这方面没有太多经验 希望大家能给我一些建议 以下是我想要拥有的东西 标签云 文章存档 按月 按年 文章评级 例如带有星星或自定义图标
  • 在 Django Rest Framework 中访问视图集和序列化器中的请求对象?

    我想访问 DRF 中 Views py 和 Serializers py 中的请求对象 我的观点 py class ProductViewSet viewsets ReadOnlyModelViewSet This viewset auto
  • Django:如何测试“HttpResponsePermanentRedirect”

    我正在为我的 django 应用程序编写一些测试 在我看来 它使用 HttpResponseRedirect 重定向到其他一些网址 那么我该如何测试呢 姜戈TestCase类有一个方法assertRedirects https docs d
  • 使用 data.table 左连接

    假设我有两个数据表 s dataA A B 1 1 12 2 2 13 3 3 14 4 4 15 dataB A B 1 2 13 2 3 14 我有以下代码 merge test merge dataA dataB by A all d

随机推荐