gpt4 book ai didi

django - 我如何使用 Model._meta.get.fields() 读取模型中的所有字段

转载 作者:行者123 更新时间:2023-12-03 07:07:55 24 4
gpt4 key购买 nike

我想显示一些字段,我知道我可以通过以下方式做到这一点:

在 models.py 中:

class Person(models.Model):
person_id = models.UUIDField(default=uuid.uuid4, primary_key = True)
date_registered = models.DateField(auto_now_add=True)
first_name = models.CharField(max_length = 50)
last_name = models.CharField(max_length = 100)
date_of_birth = models.DateField()
email = models.EmailField()

在我的 admin.py 中:

class AuthorAdmin(admin.ModelAdmin):
list_display = ('last_name', 'first_name', 'last_name', 'date_of_birth' )
fields = [('first_name' ,'last_name'), 'date_of_birth']
pass
admin.site.register(Author, AuthorAdmin)

不幸的是,我的表有很多字段,我不想单独写入它们。我发现 ._meta.get.fields() 可以读取所有字段。但是,我无法得到正确的结果。在我的 admin.py 中按如下方式使用它:

admin.site.register(PersonLogin)
admin.site.register(LoginHistory)

class PersonAdmin(admin.ModelAdmin):
list_display = [field.name for field in Person._meta.get_fields() if not field.primary_key]
readonly_fields = ('person_id',)
pass

admin.site.register(Person, PersonAdmin)

它说 _meta 是 undefined variable 。

正在使用的最新 Django。

提前谢谢您。PG

最佳答案

_meta不可用意味着 Django 尚未设置其环境。您可以通过添加以下内容来设置:

import django
django.setup()

在顶部,但这有点脏。看看是否可以将列表理解移至 __init__ :

class PersonAdmin(admin.ModelAdmin):

def __init__(self, model, admin_site):
self.list_display = [
field.name for field in Person._meta.get_fields()
if not field.primary_key
]
super().__init__(model, admin_site)

编辑:为了适应 Eclipse 自省(introspection)错误,您可以使用 getattr明确告诉它这是一个运行时的事情:

self.list_display = [
field.name for field in getattr(Person, '_meta').get_fields()
if not field.primary_key
]

关于django - 我如何使用 Model._meta.get.fields() 读取模型中的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44016391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com