Laying out a form like "fieldsets" and "TabularInline" on a non-"admin" page

10 views
Skip to first unread message

Carl Brubaker

unread,
Feb 15, 2018, 7:23:33 AM2/15/18
to Django users
I've been trying to make a form that will get customer information:

First Name           Last Name    MI
(etc)

and have been running into issues I can't seem to resolve without doing it the hard way. I was just wondering if there was an easier method?

Using generic views and edit views, the items in my model won't layout the way I want them to, so I manually made one.

    1. When I manually made my html form, none of the labels for my input boxes show up. I though it would use a default "verbose_name", then I added a verbose_name, still didn't change.
            - I added labels to my form, no change.
    2. Even though MI is set to maxlength=1 in the model, every text box is the same size.

In the admin site you can use the "tabularinlines" and "fieldsets" to group and lay things out. Is there any method to achieving the same thing apart from the admin page? Or do I manually have to add labels to every "{{ }}" on my .html template? Thanks!


models.py

class Customer(models.Model):

    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=30)
    middle_initial = models.CharField(max_length=1, null=True, blank=True)

forms.py

class CustomerForm(ModelForm):
    class Meta:
        model = Customer
        fields = ('full_name', 'first_name', 'last_name', 'middle_initial')
    labels = {
            'first_name': _('First Name'),
            'last_name': _('Last Name'),
            'middle_initial': _('MI'),
       }

customer_form_view.html

{% extends "base_template.html" %}

{% block center %}
<form action="" method="GET">
    {% csrf_token %}
    <div>{{ form.first_name }} {{ form.last_name }} {{ form.middle_initial }}</div>
    <div><input type="submit" value="Save" /></div>
</form>
{% endblock %}
Reply all
Reply to author
Forward
0 new messages