Django 模型子类的类型提示

2024-03-15

我有 Django 视图的辅助函数,如下所示(代码如下)。它返回 None 或与给定查询匹配的单个对象(例如pk=1).

from typing import Type, Optional

from django.db.models import Model

def get_or_none(cls: Type[Model], **kwargs) -> Optinal[Model]:
    try:
        return cls.objects.get(**kwargs)
    except cls.DoesNotExist:
        return None

假设我创建了自己的模型(例如Car)有自己的字段(例如brand, model)。当我分配结果时get_or_none函数到变量,然后检索实例字段,我在 PyCharm 中收到令人讨厌的未解析引用的警告。

car1 = get_or_none(Car, pk=1)

if car1 is not None:
    print(car1.brand) # <- Unresolved attribute reference 'brand' for class 'Model'

什么是正确的类型暗示摆脱这个警告和获取变量的代码完成)?


Found this https://stackoverflow.com/a/53050962/12613082回答几乎类似的问题。解决方案是使用TypeVar https://docs.python.org/3/library/typing.html#typing.TypeVar从打字

from typing import TypeVar, Type, Optional

from django.db.models import Model


T = TypeVar('T', bound=Model)

def get_or_none(cls: Type[T], **kwargs) -> Optional[T]:
    ... # same code

一切正常:没有警告 and 代码完成

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

Django 模型子类的类型提示 的相关文章

随机推荐

  • 具有 AsynchronousServerSocketChannel 的多线程服务器

    我必须实现一个应该接受更多连接的服务器 没有任何更深入的思考 我决定使用新的 JAVA NIO 2 类 我目前的做法是 final Semaphore wait new Semaphore 1 while true wait acquire
  • 为什么函数绑定到它们传递的第一个类型

    我是 F 新手 我在闲逛 发现了一些有趣的东西 我希望有人能启发我了解幕后发生的事情 所以我做了这个功能 let my func x y x y 然后我用参数调用该函数1 and 2给我3 这是我期望发生的事情 但是当我将两个字符串传递给m
  • 与 StructureMap 4.6 瞬态生命周期的混淆

    我使用 StructureMap 4 6 作为我的 IoC 容器 我对其生命周期有点困惑 正如我在其文档中所读到的那样 Transient 将为每个容器创建一个对象实例 支持的生命周期 http structuremap github io
  • eval() 和 new Function() 是同一件事吗?

    这两个函数在幕后做同样的事情吗 在单语句函数中 var evaluate function string return eval string var func function string return new Function ret
  • SQL Server 2005:为什么命名事务?

    我一直在整理 SQL Server 中的整个嵌套事务 并且对嵌套事务的行为有了一些了解 当嵌套事务时 只有 最外层提交实际上会 犯罪 嵌套时 Commit Trans txn name 将始终适用于最里面 交易 即使 txn name 指的
  • 增强型 For 循环 - 对象数组

    好的 我有一个名为 Dog 的类 它接受两个参数 一个字符串和一个整数 该类有一个名为 bark 的方法 该方法根据传递给 Dog 构造函数的整数打印一个字符串 我还有一个名为 Kennel 的类 它创建了 5 个 Dog 的数组 看起来像
  • 只能检索有限数量的页面

    我想知道为什么我无法检索到第165页之后的更多页数据 page number is 165 4 image gif page number is 165 13 page number is 165 3 page number is 165
  • 复制 S3 存储桶(包括版本)

    有没有办法复制 S3 存储桶 包括对象的版本 我读到复制存储桶的方法是使用命令行工具 aws s3 sync s3
  • ASP.NET MVC 3 和 NHibernate 脚手架

    我找到了这篇文章 http blog stevensanderson com 2011 01 13 scaffold your aspnet mvc 3 project with the mvcscaffolding package htt
  • Heroku SSL 端点 - “没有这样的应用程序”

    有什么想法为什么当我访问 herokussl com URL 时 添加证书和 Heroku SSL 端点后 可能会收到 No Such App 错误 我按照这里的说明进行操作 https devcenter heroku com artic
  • 检测到依赖循环导入/无循环

    我正在尝试在 ES6 中设置 API 端点 在我的主服务器文件中 我尝试导入路由器模块 但收到错误 检测到依赖循环导入 无循环 请在下面找到我的代码以获得许可和帮助 import express from express import bo
  • 球体上的 3D 坐标为纬度和经度

    我得到以下信息 存在一个原点为 0 0 0 半径为 R 的球体 进行射线球体相交后 我知道 3D 空间中球体上的一个点 XYZ 直线穿过球体外壳的 3D 空间中的确切位置 对于我的程序 我想计算球体上 XYZ 点的纬度和经度 但我无法想出
  • 删除所有 Git 提交历史记录

    我正在尝试从 Github 获取一个存储库 恢复过去的标签 将其推送到另一个远程并删除所有历史记录 除了删除所有提交日志之外 我可以执行以下所有操作 我缺少什么 git clone https github com user user re
  • asp.net mvc 模型与实体框架模型

    在 asp net mvc model 文件夹中创建模型是最佳实践吗 将这些模型与您的视图结合使用 并使用服务层将我的模型 调整 为 EF 模型 或者您是否使用过其他方法 这种方法的问题在于 大多数时候我的 自制 模型是 EF 模型的副本
  • 失败 [INSTALL_FAILED_UPDATE_INCOMPATIBLE],然后是 DELETE_FAILED_INTERNAL_ERROR

    当我尝试在 nexus5 设备上运行应用程序时 android studio 打开错误窗口 显示 安装失败 并显示消息 INSTALL FAILED CONFLICTING PROVIDER 然后系统询问我是否要卸载现有应用程序 即使设备上
  • 将 MySQL 日期时间转换为时间戳

    我正在尝试将日期时间转换为时间戳 但 mysql 向我发出警告 并且转换后的值也是错误的 这是SQL查询 UPDATE table1 A table2 B SET B date added UNIX TIMESTAMP STR TO DAT
  • sqlite 搜索多列

    我正在尝试对表中的所有列执行区分大小写的搜索 所以我做了类似的事情 Select From mytable Where col1 col2 etc like SomeValue 但对于大写和小写它总是返回相同的结果 如果我这样做 Selec
  • 如何使用 JpegTran 递归处理 Windows 目录中的所有图像并覆盖它们?

    现在我有以下批处理文件用于处理图像 echo none cd 1 md 1 ProcessedJPEGS for i in jpg do C Program Files Image Optimization jpegtran exe opt
  • 使用 Gradle Release 插件进行 Android 构建

    我想用Gradle 发布插件 https github com townsfolk gradle release in Android Project 我配置了它 一切都很好 除了一件事 Gradle Release Plugin更改项目版
  • Django 模型子类的类型提示

    我有 Django 视图的辅助函数 如下所示 代码如下 它返回 None 或与给定查询匹配的单个对象 例如pk 1 from typing import Type Optional from django db models import