How to DRY (myself) in Django form for Create and Edit Form -


i created 2 forms in django same model, named accountcreateform , accounteditform. account model has 3 fields , each of them has few form attributes such max_length, help_text, error_messages. example,

class accountcreateform(forms.modelform):     name = forms.charfield(max_length=50, required=true, label='account name', help_text='50 characters max', error_messages={'required': 'please enter account name'})     number = forms.charfield(max_length=16, required=true, label='phone number', help_text='10-16 digits max', error_messages={'required': 'please enter phone numbername'}) 

i want user able edit existing accounts well. so, added form editing purposes follow.

class accounteditform(forms.modelform):     name_error = { 'max_length': ("name should no longer 50 characters."), 'required': ("please enter account name")}     number_error = {'max_length': ("phone number should between 10-16 characters."),'min_length': ("phone number should between 10-16 characters."),'required': ("please enter phone number tied twilio account")}      name = forms.charfield(max_length=50, required=true, label='account name', help_text='50 characters max', error_messages=name_error)     number = forms.charfield(max_length=16, required=true, label='phone number', help_text='10-16 digits max', error_messages=number_error) 

and template both account_create.html , account_edit.html share simple code this:

    <form method="post">         {% csrf_token %}         <p>         {% field in form %}             {{ field.errors }}             <label for="{{ field.id_for_label }}">{{ field.label }}({{ field.help_text }}):</label>             <br />             {{ field }}<br /><br />         {% endfor %}         </p>         <input class="btn btn-primary done-btn" type="submit" value="create new account">     </form> 

it works fine , django helps provide error messages , texts fine. but, feel i'm repeating things here. tried approach suggested django documentation page this:

class accounteditform(forms.modelform):     class meta:         model = account         fields = ('name', 'number')         labels = {'name' : _('account name'), 'number': _('phone number')}         error_messages = {                 'name': {                     'max_length': _("name should no longer 50 characters."), 'required': ....} 

and on. if intentionally left, name field, blank in edit form, django doesn't show error. way it'll show error seems first approach. there can improve code quality (that is, not repetitive)? thank you.

there can 2 ways accomplish this:-

1) make name field required inside model adding 'blank=false'.

    name = models.charfield(blank=false) 

2) if don't want modify blank setting fields inside models (doing break normal validation in admin site), can following in form class:

def __init__(self, *args, **kwargs):     super(accounteditform, self).__init__(*args, **kwargs)      self.fields["name"].required = true 

Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -