首页 > 解决方案 > 如果 ForeignKey 的值为 None,如何获取对象的类型?

问题描述

我有一个基本的外键表结构

class Category(models.Model):
    id_pk = models.AutoField(primary_key=True)
    label = models.CharField(unique=True, max_length=200, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'category'

class PartProperty(models.Model):
    id_pk = models.AutoField(primary_key=True)
    category = models.ForeignKey(Category, models.DO_NOTHING, blank=True, null=True)


    class Meta:
        managed = False
        db_table = 'part_property'

如果里面的一行PartProperty有一个Category对象,我可以通过 egpart_property = PartProperty.objects.select_related().filter(id_pk=part_property_id)part_property[0].catogory 分别动态访问这个对象,part_property .values(*(self.__COLUMN_NAMES))[0]['self.__COLUMN_NAMES[i]]并设置一个新值并保存外键指向的表。

但是如果part_property[0].catogory是 None 我没有用于创建外键表对象的对象类型。

是否可以从 PartProperty / PartProperty 模型中动态获取对象类型?

标签: djangodjango-models

解决方案


_meta您可以通过属性动态获取字段的模型类。例如PartProperty._meta.get_field("category").related_model将返回Category模型类。

您还可以动态获取模型的字段列表。有关 _meta API 的官方文档,请参阅此链接:https ://docs.djangoproject.com/en/3.2/ref/models/meta/


推荐阅读