首页 > 解决方案 > 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 中正确评估整数?

标签: djangopostgresqldjango-modelsforeign-keys

解决方案


base_fields是元类执行时找到的所有字段的列表。这些是实际直接在类上声明的字段,例如原始/全局/主定义。

字段是实际用于为表单生成 HTML 以及验证用户输入的字段。它以base_fields的副本开始,并且可以在自定义表单时使用字段,例如向表单动态添加新字段,或更改现有字段的值/选择。

base_fields字段类似于蓝图和实际建造的建筑物。蓝图是主要定义。一旦您在那里进行了更改,该更改是全局的并且在范围内是持久的。田野就像你建造的房子。您可以根据原始规格制作任意数量的相同类型的房子。但是,您可以对每栋房屋进行定制,以使每栋房屋都独一无二。

它对我不起作用,因为我没有将过滤后的值分配给生成实际 HTML 输出的字段属性。


推荐阅读