django - Django模型外键过滤整数问题
问题描述
我有一个带有指示建筑物类型的整数字段的建筑模型:
class Building(models.Model):
building_type = models.PositiveIntegerField('Building Type')
我有一个 BuildingUnit 模型,其中包含对 Building 的外键引用:
class BuildingUnit(models.Model):
building_fk = models.ForeignKey(
'Building',
on_delete=models.CASCADE, verbose_name="Building"
)
我正在覆盖 BuildingUnit 模型的init函数并尝试根据整数值(建筑物的类型)过滤外键:
self.base_fields['building_fk'].queryset = BuildingUnit.objects.filter
(building_fk__building_type=16)
这没用。所有建筑类型都继续回归。当我调试和检查 SQL 语句时,它说语法无效。WHERE 子句说 building.building_type=16。在我看来是对的。我正在使用 Postgres。如何让 Django 中的 objects.filter() 在 PLPGSQL 中正确评估整数?
解决方案
base_fields是元类执行时找到的所有字段的列表。这些是实际直接在类上声明的字段,例如原始/全局/主定义。
字段是实际用于为表单生成 HTML 以及验证用户输入的字段。它以base_fields的副本开始,并且可以在自定义表单时使用字段,例如向表单动态添加新字段,或更改现有字段的值/选择。
base_fields和字段类似于蓝图和实际建造的建筑物。蓝图是主要定义。一旦您在那里进行了更改,该更改是全局的并且在范围内是持久的。田野就像你建造的房子。您可以根据原始规格制作任意数量的相同类型的房子。但是,您可以对每栋房屋进行定制,以使每栋房屋都独一无二。
它对我不起作用,因为我没有将过滤后的值分配给生成实际 HTML 输出的字段属性。
推荐阅读
- sql - 如何使用 LINQ 包含在 SQL 中
- .net-core - 使用 B2C 生成元数据端点时,id_token_hint 参数签名验证失败
- javascript - 如何使用 vanilla JS 从重绘中删除画布
- typescript - 为什么在 Typescript 中访问缺少的 getter 会返回“未定义”而不是导致编译错误?
- r - 基于R中的两个嵌套条件过滤数据帧的最有效算法?
- postgresql - 如何确保两个引用的外键表对另一个表具有相同的外键?
- azure - 基于身份的身份验证不适用于 Azure 存储文件共享
- google-sheets - 如何在Google电子表格中检查多张表格中的数据,但排除一张
- sql - 调试导致“资源超出”错误的行
- javascript - 反应 ScrollableTabView onChangeTab