Ponieważ większość odpowiedzi jest nieaktualna, spróbuję zaktualizować Cię w
postach Django 2.2 Here - Twoja aplikacja (posty, blog, sklep itp.)
1) Z linku do modelu : 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()
Uwaga:
all_fields=BlogPost._meta.get_fields()
Uzyska także pewne relacje, które np. nie można wyświetlić w widoku.
Jak w moim przypadku:
Organisation._meta.fields
(<django.db.models.fields.AutoField: id>, <django.db.models.fields.DateField: created>...
i
Organisation._meta.get_fields()
(<ManyToOneRel: crm.activity>, <django.db.models.fields.AutoField: id>, <django.db.models.fields.DateField: created>...
2) Z instancji
from posts.model import BlogPost
bp = BlogPost()
all_fields = bp._meta.fields
3) Z modelu nadrzędnego
Załóżmy, że mamy Post jako model nadrzędny i chcesz zobaczyć wszystkie pola na liście, a pola nadrzędne mają być tylko do odczytu w trybie edycji.
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