Search code examples
djangodjango-modelsdjango-modeladmin

django model _meta.get_fields() just datettime fields


I have want gather just fieldname type is datetime by

_meta.get_fields() 

Model.py :

class testmodel (models.Model):
    name = models.CharField(max_length=200)
    field = models.CharField('field', max_length=50, choices=(), default=None)
    create_time = models.DateTimeField(null=True,blank=True)
    complete_time = models.DateTimeField(null=True,blank=True)

admin.py :

all_fields = [f.name for f in testmodel._meta.fields]

class myform(forms.ModelForm):
field = forms.ChoiceField(choices=all_fields)
name = forms.TextInput()

class MyModelAdmin(admin.ModelAdmin):
   fields = ('name', 'field',)
   list_display = ('name', 'field',)
   form = myform

admin.site.register(testmodel,MyModelAdmin)

what is solution for this ?


Solution

  • Use list comprehension as

    from django.db.models import DateTimeField
    
    datetime_model_fields = [field for field in MyModelClass._meta.get_fields() if isinstance(field, DateTimeField)]