当前位置: 首页 > 面试题库 >

Django:获取模型字段列表?

沙宣
2023-03-14
问题内容

我定义了一个User(最终)继承自的类models.Model。我想获取为此模型定义的所有字段的列表。例如,phone_number = CharField(max_length=20)。基本上,我想检索从Field该类继承的任何内容。

我以为我可以利用来检索这些inspect.getmembers(model),但是它返回的列表不包含任何这些字段。看起来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模型,我试图列出其所有字段。我已经看到了使用_meta模型属性执行此操作的一些示例,但是meta前面的下划线是否表示_meta属性是私有属性,不应直接访问?…例如,因为_meta的布局将来可能会更改,并且不是稳定的API? _meta是该规则的例外吗?它是否稳定且可以使用,还是访问它的不正确做法?还是有一种功能或其他方法可以在不使用_meta属性的情况下自省模型的字段?

  • 问题内容: 在我的模型中,我想要一个包含三联列表的字段。例如。是否存在可以将这些数据存储在数据库中的字段? 问题答案: 你可以使用JSON将其转换为字符串并将其存储为字符串。 例如, 你可以在类中添加方法以自动为你转换。

  • 问题内容: 如何使用Django的ORM和PostgreSQL后端存储二进制数据的“ blob”?是的,我知道Django对这种事情不屑一顾,是的,我知道他们更喜欢你使用ImageField或FileField来表示,但这足以说明我的应用程序不切实际。 我曾尝试通过使用TextField对其进行破解,但是当我的二进制数据未严格确认模型的编码类型(默认为unicode)时,会出现偶尔的错误。例如 问

  • 问题内容: 不知道为什么会弹出此错误。这是我创建的模型- 这是我访问这些模型的视图- 这时我得到一个错误- OperationalError:(1054,““字段列表”中的未知列“ appname_usershow.show_id””) 如您所见,我的模型中甚至没有此列?为什么会出现此错误? 问题答案: 正如@inception所说,我的表架构已更改并且运行不会更新已创建的表。 显然,通过更新到模

  • 问题内容: 我正在开发一个多租户应用程序,其中一些用户可以定义自己的数据字段(通过管理员)以收集表单中的其他数据并报告数据。后一点使得JSONField不是一个很好的选择,所以我有以下解决方案: 请注意,CustomDataField如何具有Site的ForeignKey-每个Site将具有一组不同的自定义数据字段,但是使用相同的数据库。然后可以将各种具体的数据字段定义为: 这导致以下用途: 但这

  • 问题内容: 在Django中,你可以指定如下关系: 然后在内部必须将字符串“ Person”转换为模型。 该功能在哪里?我想使用它,但是找不到。 问题答案: 在Django 1.7中已弃用(在1.9中删除),以支持新的应用程序加载系统。 Django 1.7文档为我们提供了以下内容: