我想显示一些字段,我知道我可以通过以下方式完成:
在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是未定义的变量。
最新使用的Django。
提前谢谢你。 PG
答案 0 :(得分:1)
_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内省错误,您可以使用getattr
明确告诉它它是运行时的东西:
self.list_display = [
field.name for field in getattr(Person, '_meta').get_fields()
if not field.primary_key
]