1

I am using flask-security and is now adding flask-admin. I have my user view and my roles view. I can create users and roles. But the roles don't show as the respective role names in the user dropdown menu. All roles just shows as "Role object".

I am using Mongoengine.

models:

class Role(db.Document, RoleMixin):
    name = db.StringField(max_length=80, unique=True)
    description = db.StringField(max_length=255)
    permissions = db.StringField(max_length=255)

class User(db.Document, UserMixin):
    username = db.StringField(max_length=255)
    password = db.StringField(max_length=255)
    active = db.BooleanField(default=True)
    fs_uniquifier = db.StringField(max_length=64, unique=True)
    confirmed_at = db.DateTimeField()
    current_login_at = db.DateTimeField()
    last_login_at = db.DateTimeField()
    current_login_ip = db.StringField(max_length=255)
    last_login_ip = db.StringField(max_length=255)
    login_count = db.IntField(max_length=255)
    roles = db.ListField(db.ReferenceField(Role), default=[])


user_datastore = MongoEngineUserDatastore(db, User, Role)

flask admin views:

admin = Admin(app, name='ADMIN', template_mode='bootstrap3')
admin.add_view(ModelView(User))
admin.add_view(ModelView(Role))

As you see in the below screenshots, the first one is the created roles "Admin" and "test". But when I try to assign the roles to a user in flask-admin the roles only shows as "Role object".

Roles created: Roles

Assign roles: Assign roles

aquatic7
  • 615
  • 1
  • 6
  • 19

1 Answers1

2

Try adding:

def str(self): return self.name

to your Role model

You might also need to add str to your User model as well.

jwag
  • 662
  • 5
  • 6