Django form fieldset inspire django admin fieldset
pip install django-forms-fieldset
settings
Add forms_fieldset
to your INSTALLED_APPS setting like this:
INSTALLED_APPS = [
...
'forms_fieldset',
]
load template
{% load forms_fieldset static %}
<link rel="stylesheet" type="text/css" href="{% static 'forms_fieldset/css/main.css' %}">
<form>
{{ form|fieldset:'#42945c' }}
</form>
Note : The fieldset filter receives the color of the titles of the form groups, by default this color is used: # 79AEC8)
models
from django.db import models
# Create your models here.
class Student(models.Model):
first_name = models.CharField(max_length=200, verbose_name="First Name")
last_name = models.CharField(max_length=200, verbose_name="Last Name")
email = models.EmailField(unique=True, verbose_name="Email")
adress = models.CharField(max_length=200, verbose_name="Adress")
mother_name = models.CharField(max_length=200, verbose_name="Mother Name")
father_name = models.CharField(max_length=200, verbose_name="Father Name")
class Note(models.Model):
SUBJECTS = (
('Math', 'Math'),
('French', 'French'),
('Physical', 'Physical'),
)
student = models.ForeignKey('Student', on_delete=models.CASCADE, related_name="notes")
subject = models.CharField(max_length=200, choices=SUBJECTS, verbose_name="Subject")
value = models.IntegerField(verbose_name="Notation")
class Meta:
verbose_name = "Les notes"
verbose_name_plural = "Les notes"
forms
from django.forms import ModelForm
from .models import Student
class StudentForm(ModelForm):
fieldsets = [
("Student Information", {'fields': [
('first_name', 'last_name'),
('email', 'adress'),
]}),
("Parent Information", {'fields': [
'mother_name',
'father_name',
]}),
]
class Meta:
model = Student
fields = '__all__'
views
from django.shortcuts import render
from django.forms import inlineformset_factory
from .forms import StudentForm
from .models import Student, Note
# Create your views here.
def home(request):
form = StudentForm()
InlineForm = inlineformset_factory(Student, Note,
fields=('subject', 'value',), exclude=('pk',), can_delete=False,
)
if request.method == 'POST':
form = Form(request.POST, request.FILES)
formset = InlineForm(request.POST, request.FILES)
#save...
context = {
'form': form,
'inline_form': InlineForm()
}
return render(request, 'home.html', context)
template
{% load forms_fieldset static %}
<!DOCTYPE html>
<html>
<head>
<title>Home page</title>
<link rel="stylesheet" type="text/css" href="{% static 'forms_fieldset/css/main.css' %}">
</head>
<body style="width: 75%; margin: 50px auto">
<h1>Student form information</h1>
<form>
{{ form|fieldset:'#42945c' }}
{{ form_inline|inline_fieldset:"#42945c,Note des eleves" }}
</form>
</body>
</html>
- Fieldset django form
- Fieldset (tabular style) inline form
- version 1.0.2
fix #6
- version 1.0.1
fix #3