You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何基于数据库模型类而非视图类运行函数?

问题描述

在views.py中使用自定义的Extruders类时功能正常,但切换为models.py中的Extruder数据库模型类后,出现错误:'<'' not supported between instances of 'int' and 'DeferredAttribute'。尝试用int()转换时,又触发类型错误:int() argument must be a string, a bytes-like object or a number, not 'DeferredAttribute'。

问题分析
  • 核心错误:遍历数据库查询集extruders时,错误地访问了模型类Extruder的字段属性(如Extruder.min_width),而非循环中当前模型实例extruder的字段值。
  • Django模型的字段在类层面是DeferredAttribute对象,只有访问模型实例的字段时,才会获取到数据库存储的具体数值。直接用类字段与int值比较,必然触发类型不兼容的错误。
解决方法

将所有循环内的Extruder.xxx替换为extruder.xxx(注意循环变量是小写的extruder)。以下是关键代码修正示例:

原错误代码(LFT分支)

if film_width < int(Extruder.min_width):
    b.append(Extruder.name + ' : Film too narrow')
elif film_width > int(Extruder.max_width):
    b.append(Extruder.name + ' : Film too wide')
else:
    percentage = film_width / Extruder.max_width
    speed = Extruder.max_speed * percentage

修正后代码

if film_width < extruder.min_width:
    b.append(extruder.name + ' : Film too narrow')
elif film_width > extruder.max_width:
    b.append(extruder.name + ' : Film too wide')
else:
    percentage = film_width / extruder.max_width
    speed = extruder.max_speed * percentage

同样需要修正其他分支(SWS、DWS、JFS等)中所有类似错误:

  • Extruder.min_width → extruder.min_width
  • Extruder.max_width → extruder.max_width
  • Extruder.name → extruder.name
  • Extruder.max_speed → extruder.max_speed

注:代码中J-Fold分支存在未定义的strip_out变量,需自行补充定义,但不属于当前错误的核心原因。

内容的提问来源于stack exchange,提问作者Vinylnet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:55:24