Django Formset

Django Formset

April 2, 2024 | seedling, permanent

tags :

Django View #

from django.shortcuts import render
from django.views.generic import TemplateView, FormView
from django.contrib import messages
from .forms import UploadFormSet
from .models import UploadModel


class HomePageView(TemplateView):
    template_name = 'home.html'


class ChatPageView(TemplateView):
    template_name = 'chat.html'


# form view to upload files
# formset with view
class UploadFileView(FormView):
    template_name = 'upload.html'
    form_class = UploadFormSet
    success_url = '/upload/'

    def form_valid(self, formset):
        for form in formset:
            if form.is_valid():
                form.save()
                messages.success(
                    self.request,
                    'Submitted successfully'
                    )
        return super().form_valid(formset)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        formset = context['form']
        formset.extra = 1  # Specify the number of extra empty forms to display
        context['form'] = UploadFormSet(
            queryset=UploadModel.objects.none()
            )
        return context

Model #

from django.db import models


class UploadModel(models.Model):
    uploaded_at = models.DateTimeField(auto_now_add=True)
    document = models.FileField(
        upload_to='uploads/',
        null=True,
        blank=True,
        )
    web_site_url = models.URLField(
        max_length=200,
        blank=True,
        null=True,
        )

Form #

from django import forms
from .models import UploadModel


class UploadForm(forms.ModelForm):
    class Meta:
        model = UploadModel
        fields = '__all__'  # You can also specify a list of fields ['field1', 'field2']


UploadFormSet = forms.modelformset_factory(
    UploadModel,
    form=UploadForm, extra=1)

Template or HTML #

% extends “base.html” % % load static %

% load crispy_forms_tags %

% block content % % if messages % % for message in messages %

message
% endfor % % endif %

Upload document or website
% csrf_token % form.management_form % for form_1 in form % form_1 | crispy % endfor %
% endblock %

% block js %

% endblock %

Settings #

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    'corsheaders',
    "frontend",
    'crispy_forms',
    'crispy_bootstrap5'
]


CRISPY_TEMPLATE_PACK ='bootstrap5'


No notes link to this note

Go to random page

Previous Next