Django জ্যাঙ্গো
  • Python Basic
  • Python OOP
  • OOP Project
  • Jupyter Notebook
  • Python MOngodb
  • Numpy
  • Pandas
  • Framework কি?
  • জ্যাঙ্গো ওয়েব ফ্রেমওয়ার্ক
  • ভার্চুয়াল এনভায়র্নমেন্ট
    • ভার্চুয়াল এনভায়র্নমেন্ট তৈরী করি :
    • জ্যাংগো ইন্সটল
  • প্রথম প্রজেক্ট শুরু
    • সেটিংস পরিচিতি
    • Template
      • load css,js
        • template load
    • create project
  • অ্যাপস কি?
    • প্রথম অ্যাপস তৈরি
  • apps কে প্রজেক্টের সাথে যুক্ত করি
  • এইচটিএমএল টেমপ্লেট নিয়ে কাজ করি
    • স্ট্যাটিক ফাইল ও টেম্পলেট
    • Hompage পরিবর্তন করি
    • বেস টেমপ্লেট বানাই
    • html টেম্পলেট কে কনভার্ট করি
    • Template Tags
    • Context Processor
  • Urls
  • urls.py এ প্যারামিটার কিভাবে কাজ করে
  • message
  • Forms
    • সাধারণ একটি ফর্ম বানাই
    • ফর্ম লে আউট পরিবর্তন
    • বুটস্ট্রাপ ফর্ম
    • মডেল ফর্ম
      • Form Customization
  • models
    • মডেল বানাই
    • মাইগ্রেশন
    • মডেল ভ্যালিডেশন করা
    • মডেল কাস্টমাইজ
  • Crud
    • image Crud Admin Panel
    • Custom Crud
      • form design bootstrap
      • search Functionality
      • menu
    • File Upload App
    • Image Crud
    • Class view Crud
  • Django Authentication
    • Login/Logout(Default)
    • Registration Page(Default )
    • Profile UpdateView (Default)
    • Change Password (Default)
    • Custom Login And Registration
    • Protecting View
  • Custom Field User Model
  • Formset
    • Page 1
    • formset Crud
  • Send Email
    • Send Email From Gmail
      • Send Email With Attachment
    • Email Verification
  • Uploading Images to Cloudinary
  • Database Connection
    • MySQL
    • postgresql
  • Django Orm
    • Basic Database Operation
      • -all()
      • - get():
      • - first() and last():
      • - filter():
      • - exclude():
      • Chaining Queries
      • Creating, Updating, and Deleting Records
      • Aggregation
      • Annotation
    • Model Relationships and Related Names
      • One-to-One Relationships
      • Many-to-One Relationships
      • Many-to-Many Relationships
      • Reverse Relationships
      • Understanding related_name
    • Advanced Querying with Django ORM
      • Chaining Queries
      • F() Expressions
      • Q() Objects
        • Dynamic Search
      • Raw SQL Queries
    • Performance Optimization with Django ORM
      • Select Related
    • Django সিগন্যাল :
  • requirement.txt
  • channels
    • Create Project
    • কনফিগার
  • Send SMS in Django
    • Configuration
  • Mysql Setup
  • অ্যাডমিন প্যানেলে
    • Site Heading And Title Change
    • মডেলকে অ্যাডমিন প্যানেলে যোগ করি
    • মডেলকে একবার সেভ করা যাবে
    • এডমিন প্যানেলে পিডিএফ এক্সপোর্ট বাটন যোগ করি
    • মডেল ফর্ম কাস্টোমাইজ করি
    • মডেলের html টেম্পলেট পরিবর্তন করি
    • ফিল্ড এর ডিজাইন বুটস্ট্রাপ ফরম্যাটে হবে
    • টেবিল বেসড ফর্মসেট এপ্লিকেশন
    • নির্দিষ্ট ইউজারকে মডেলে এক্সেস পারমিশন দেয়া
    • অ্যাডমিন প্যানেলে জাভাস্ক্রিপ্ট ও css ফাইল যোগ করা
    • fetch data
    • bill of materials
  • Django Rest Framework
    • ভার্চুয়াল এনভায়র্নমেন্ট
    • প্রজেক্ট তৈরী করি
    • মডেলকে প্রস্তুত করি
    • serializer
    • Validation
    • Api তৈরী করি (api_view)
    • Api তৈরী করি (viewsets)
    • JsonResponse তৈরি করি
    • authentication
    • Reactjs
  • প্যাকেজ নিয়ে কাজ করি
    • Tinymce Editor
    • highlight.js
    • Social Login
      • Facebook
      • Github
      • google
    • Select2
      • admin panel
    • CELERY
    • Autocomplete Show Multiple Fields
      • Autocomplete Search
  • Mongodb
    • basic models,forms,views
    • Category Crud
      • Category List
      • Create Category
      • Edit Category
      • Delete Category
      • Link Button list.html
    • Tags Crud
      • Tags List
      • Create Tags
      • Edit Tags
      • Delete Tags
      • Link Button list.html
    • Post
      • Post List
      • Create Post
        • Tinymc
      • Post Details
      • Edit Post
      • Delete Post
      • Link Button list.html
      • Search
    • Comment
      • Post Details
    • Formset Crud
      • Models.py
      • forms.py
      • views
      • urls.py
      • Author
        • author_list
        • create_author
        • Edit Author
        • Delete Author
        • Link Button
      • BookFormset
    • Rest Api
    • Image Upload
  • Redis
  • chart
  • Deployment
    • Pythonanywhere
    • Cpanel Host
  • Reactjs
Powered by GitBook
On this page
  • Create A Model
  • Create Form | Form To Formset
  • Urls.py
  • Views.py
  • Template

Formset

Create A Model

from django.db import models

# Create your models here.

class Item(models.Model):
  item_code = models.CharField(max_length=20)
  item_name = models.CharField(max_length=255)
  item_description = models.TextField()
  item_price = models.DecimalField(max_digits=10,decimal_places=2)
  item_qty = models.PositiveIntegerField()
  item_picture = models.ImageField(upload_to='items/')

  def __str__(self):
    return self.item_code

Create Form | Form To Formset

from django import forms
from django.forms import formset_factory
from . models import Item

class ItemForm(forms.ModelForm):
    class Meta :
        model = Item
        fields = ['item_code','item_name','item_description','item_price','item_qty','item_picture']
        widgets = {
            'item_description':forms.TextInput()
        }

ItemFormSet = formset_factory(ItemForm,extra=1)

Urls.py

from django.urls import path
from . import views
urlpatterns = [
    path('',views.item_list,name='item_list'),
    path('create/',views.item_create,name='item_create'),
    path('item_update/<int:id>',views.item_update,name='item_update'),
    path('item_delete/<int:id>',views.item_delete,name='item_delete'),
]

Views.py

from django.shortcuts import render,redirect
from django.http import HttpResponse
from . forms import ItemForm,ItemFormSet
from . models import Item



# Create your views here.


def item_create(request):
    if request.method == 'POST' :

        formset = ItemFormSet(request.POST,request.FILES,prefix = 'item',)
        if formset.is_valid():
              
            for form in formset :
                instance = form.save(commit=False)
                instance.save()
                # if form.cleaned_data.get('item_price') is None:
                #    return render(request,'item/item_formset.html',{'formset':formset})
                # else:
                       
                #     form.save()
            return redirect('item_list')
    else :
        formset = ItemFormSet(prefix='item')  
    return render(request,'item/item_formset.html',{'formset':formset})

def item_list(request):
 items = Item.objects.all()
 return render (request,'item/item_list.html',{'items':items})

def item_update(request,id):
 item = Item.objects.get(id=id) 
 if request.method == 'POST':

   form = ItemForm(request.POST, instance=item)
   if form.is_valid():
    
    form.save()
   return redirect('item_list')

 else:
    form = ItemForm(instance=item)
 return render(request,'item/item_form.html',{'form':form})


def item_delete(request,id):
 item = Item.objects.get(id=id) 
 item.delete()
 return redirect('item_list')   

Template


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

    </head>
    <body>
        
        <form  method="post" enctype="multipart/form-data" id="form-container">
            {% csrf_token %}
            {{ formset.management_form }}
            <div class="table-responsive">

              <table id="formset" class="table table-bordered border-primary table-sm ">
                <thead class="table-dark">
                  <tr>
                    <th>Code</th>
                    <th>Name</th>
                    <th>Description</th>
                    <th>Price</th>
                    <th>Qty</th>
                    <th>Picture</th>
                    <th>Action</th>
                  </tr>
                </thead>
                <tbody>
                  {% for form in formset %}

                    <tr class="item-form">
                      <td>{{ form.item_code }}</td>
                      <td>{{ form.item_name }}</td>
                      <td>{{ form.item_description }}</td>
                      <td>{{ form.item_price }}</td>
                      <td>{{ form.item_qty }}</td>
                      <td>{{ form.item_picture }}</td>
                      <td>
                        <button class="btn btn-danger" onclick="removeRow(this)">-</button>     
                           </td>
                    </tr>
       
                    {% endfor %}
                </tbody>
              </table>

            </div>
              <button id="add-form" class="btn btn-info" type="button">+</button>
            <input type="submit" class="btn btn-primary" value="submit">

            </form>



              
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
        
 <script>
    let container = document.querySelector("#form-container");
    let addButton = document.querySelector("#add-form");
    let totalForms = document.querySelector("#id_item-TOTAL_FORMS");
  
    addButton.addEventListener('click', addForm);
  
    function addForm() {
      let itemForms = document.querySelectorAll(".item-form");
      let lastForm = itemForms[itemForms.length - 1];
      let newForm = lastForm.cloneNode(true);
  
      let formNum = itemForms.length;
      let formRegex = new RegExp(`item-(\\d+)-`, 'g');
      let inputs = newForm.querySelectorAll('input');
  
      inputs.forEach((input) => {
        let newName = input.getAttribute('name').replace(formRegex, `item-${formNum}-`);
        let newId = input.getAttribute('id').replace(formRegex, `id_item-${formNum}-`);
        input.setAttribute('name', newName);
        input.setAttribute('id', newId);
        input.value = '';
      });
  
      let button = newForm.querySelector('button');
      button.addEventListener('click', function() {
        removeRow(this);
      });
  
      totalForms.value = formNum + 1;
      container.querySelector('tbody').appendChild(newForm);
    }
  
    function removeRow(button) {
      let row = button.parentNode.parentNode;
      row.parentNode.removeChild(row);
      
      let itemForms = document.querySelectorAll(".item-form");
      totalForms.value = itemForms.length;
    }
  </script>
  

  


         
    </body>
    </html>
    



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
<a href="{% url 'item_create' %}"> Create</a>
    {% for item in items %}
    <li>{{ item.item_name }} </li>

    <li>{{ item.item_price }} </li>
    <li>  <a href="{% url 'item_update' item.id %}">Edit</a>
        <a href="{% url 'item_delete' item.id %}" onclick="return confirm('Are you sure?');">Delete</a>
    </li>

    
  
   
 
    {% endfor %}
</body>
</html>
PreviousCustom Field User ModelNextPage 1

Last updated 1 year ago

//item/

//item/item_list.html

item
templates
item_formset.html
item
templates