ruipacheco
ruipacheco

Reputation: 16422

How to set form element name?

I have a web application written in Flask that uses WTForms, SQLAlchemy and corresponding Flask extensions, Flask-SQLAlchemy, Flask-WTF and WTForms-Alchemy.

For the following model:

class User(db.Model, UserMixin):
    """
    Represents a registered user.

    @TODO Override setter for password so it is always encrypted.
    @TODO Add last_login column
    """

    __tablename__ = 'User'

    def __init__(self, username=None, password=None, email=None):
        self.username = username
        self.email = email
        self.password = encrypt(password)

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False, default=u'Anonymous Lifter')
    username = db.Column(db.String, nullable=False)
    password = db.Column(db.String, nullable=False)

I try to create a Form the following way:

class LoginForm(ModelForm):
    """ Form used to login a user that does not use social login. """
    class Meta:
        model = User
        only = [u'username', u'password']
        field_args = {u'password': {'widget': PasswordInput()}}
    remember_me = BooleanField(u'Remember me')

My problem is that when I display the form on my page both username and password appear lower-cased. How can I set their labels(?)/names(?) to upper-case?

Upvotes: 0

Views: 77

Answers (1)

pjcunningham
pjcunningham

Reputation: 8046

Use the info property when defining your columns in your model. For example:

class User(db.Model, UserMixin):
    """
    Represents a registered user.

    @TODO Override setter for password so it is always encrypted.
    @TODO Add last_login column
    """

    __tablename__ = 'User'

    def __init__(self, username=None, password=None, email=None):
        self.username = username
        self.email = email
        self.password = encrypt(password)

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False, default=u'Anonymous Lifter', info={'label': 'Name'})
    username = db.Column(db.String, nullable=False, info={'label': 'Username'})
    password = db.Column(db.String, nullable=False, info={'label': 'Password'})

Or use the field_args when defining your form:

class LoginForm(ModelForm):
    """ Form used to login a user that does not use social login. """
    class Meta:
        model = User
        only = [u'username', u'password']
        field_args = {
            u'password': {
            'widget': PasswordInput(),
            'label': 'PASSWORD'
            },
            u'username': {'label': 'USERNAME'},
        }
    remember_me = BooleanField(u'Remember me')

Upvotes: 2

Related Questions