您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Django:获取模型字段列表?

Django:获取模型字段列表?

由于大多数答案已过时,因此我将尝试在Django 2.2上更新你的 信息-你的应用(帖子,博客,商店等)

1)从模型链接:https : //docs.djangoproject.com/en/2.2/ref/models/Meta/

from posts.model import BlogPost

all_fields = BlogPost._Meta.fields
#or
all_fields = BlogPost._Meta.get_fields()

注意:

all_fields=BlogPost._Meta.get_fields()

还将获得一些关系,例如。你无法在视图中显示。 就我而言:

Organisation._Meta.fields
(<django.db.models.fields.AutoField: id>, <django.db.models.fields.DateField: created>...

Organisation._Meta.get_fields()
(<ManyToOneRel: crm.activity>, <django.db.models.fields.AutoField: id>, <django.db.models.fields.DateField: created>...

2)从实例

from posts.model import BlogPost

bp = BlogPost()
all_fields = bp._Meta.all_fields

3)从父模型

假设我们将Post作为父模型,并且你希望查看列表中的所有字段,并且在Edit模式下将父字段设置为只读。

from django.contrib import admin
from posts.model import BlogPost 


@admin.register(BlogPost)
class BlogPost(admin.ModelAdmin):
    all_fields = [f.name for f Organisation._Meta.fields]
    parent_fields = BlogPost.get_deferred_fields(BlogPost)

    list_display = all_fields
    read_only = parent_fields

Django 1.8及更高版本:

你应该使用get_fields()

[f.name for f in MyModel._Meta.get_fields()]

从Django 1.8开始不推荐使用该get_all_field_names()方法,该方法将从1.10中删除

上面链接的文档页面提供了的完全向后兼容的实现get_all_field_names(),但是对于大多数目的,前面的示例应该可以正常工作。

Django 1.8之前的版本:

model._Meta.get_all_field_names()

这应该够了吧。

这需要一个实际的模型实例。如果你拥有的只是的子类django.db.models.Model,则应调用myproject.myapp.models.MyModel._Meta.get_all_field_names()

Go 2022/1/1 18:24:48 有487人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶