排除model._meta.get_fields()中的相关字段

时间:2018-05-17 08:24:23

标签: django django-models

我的模型目前定义如下:

class Category(models.Model):
    ID = models.AutoField()
    name = models.CharField()
    desc = models.CharField()

另一个模型SubcategoryForeignKey上定义了Category

当我跑步时:

Category._meta.get_fields()

我明白了:

(<ManyToOneRel: siteapp.subcategory>, <django.db.models.fields.AutoField: ID>, <django.db.models.fields.CharField: name>, <django.db.models.fields.CharField: desc>)

但是,我不想要ManyToOneRel字段;我只想要其他人。

目前,我正在做这样的事情:

from django.db.models.fields.reverse_related import ManyToOneRel
field_list = []
for field in modelClass._meta.get_fields():
    if not isinstance(field, ManyToOneRel):
        field_list.append(field)

但是,使用或不使用模型_meta API有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用concrete_fields属性。

Category._meta.concrete_fields

然而,这是一个内部Django API,使用get_fields()和你自己的过滤可能会更好,即使它可能更冗长一点。