Tom Brock
Tom Brock

Reputation: 950

How to display the text value of an enum field?

I am using django_enumfield

My model looks like this:

class GenderValues(enum.Enum):
    NONE = 0
    MALE = 1
    FEMALE = 2
    BOTH = 3

class Gender(models.Model):
    gender = enum.EnumField(GenderValues, default=GenderValues.NONE)

    def __str__(self):
        return self.gender

I have exposed this model in the admin area as follows:

admin.site.register(Gender)

I can then go to the admin area and add a gender.

Problem:

The gender appears as the number (e.g. 1 if I choose 'Male') instead of "MALE".

Note I have tried adding a label to GenderValues like this but it makes no difference:

labels = {
    MALE: 'Male',
}

Do you know how I can display "MALE" or "Male" in the admin area instead of 1?

Thank you.

Upvotes: 3

Views: 5787

Answers (1)

Alex
Alex

Reputation: 6047

use _display()

def __str__(self):
    return self.get_gender_display()

or

Use list_display (in admin)

class GenderAdmin(admin.ModelAdmin):

     list_display=['gender']

admin.site.register(Gender, GenderAdmin) 

Upvotes: 6

Related Questions