Python
 Computer >> コンピューター >  >> プログラミング >> Python

Django –単一のビューで複数のフォームを処理する


1つの関数またはビューで複数のフォームを処理する必要がある場合があります。この記事では、2つのフォームを同時に同じビューで処理する関数を作成する方法を説明します。多くの場合便利です。 2つ以上のフォームも処理します。

Djangoプロジェクトとアプリを作成し、プロジェクトに "multipleFormHandle"という名前を付けました。 アプリは"formhandlingapp"です。

settings.pyにアプリを含めるなどの基本的な操作を行います INSTALLED_APPSを作成し、プロジェクトのurlにアプリのURLを含めます。

次に、 forms.pyを作成します アプリ内およびアプリディレクトリ内の「テンプレート」フォルダ。 home.htmlを追加します テンプレートで。

multi-form_viewをインストールします ライブラリ-

pip install multi_form_view

現在、 urls.pyにあります アプリの-

from django.urls import path,include
from . import views
urlpatterns = [
   path('',views.SchoolData.as_view(),name='home'),
]

ここでは、ビューを設定します ビューセットを使用します ビューとして。 ビューセットを使用します ここ。

models.py内 −

from django.db import models

# Create your models here.

class StudentData(models.Model):
   name=models.CharField(max_length=100)
   standard=models.CharField(max_length=100)
   section=models.CharField(max_length=100)

class TeachertData(models.Model):
   name=models.CharField(max_length=100)
   ClassTeacherOF=models.CharField(max_length=100)
   Salary=models.CharField(max_length=100)

フォームデータをモデルに保存するため、2つのモデルを作成しました。

forms.py内 −

from django import forms
from .models import TeachertData,StudentData

class StudentForm(forms.ModelForm):
   class Meta:
      model=StudentData
      fields="__all__"

class TeacherForm(forms.ModelForm):
   class Meta:
      model=TeachertData
      fields="__all__"

ここでは、ビューからフロントエンドにレンダリングするモデルフォームを作成しました。

home.html内 −

<!DOCTYPE html>
<html>
   <head>
      <title>tut</title>
   </head>
   <body>
      <form method="post" enctype="multipart/form-data">
         {% csrf_token %}

         <label><h3>Teacher</h3></label>
         //accessing form 1 from view
         {{ forms.teacher_form.as_p }}
         <label><h3>Student</h3></label>
         //accessing form 2 from view
         {{ forms.student_form.as_p }}
         <input type="submit" value="submit"/>
      </form>
   </body>
</html>

これは、2つのDjangoフォームを1つのフォーム要素の下に1つの送信ボタンでレンダリングするフロントエンドです。

ここではコンセプトとその方法を学んでいるので、スタイルを追加しません。

views.py内 −

from django.shortcuts import render
from .forms import StudentForm,TeacherForm
from django.views.generic.list import ListView
from django.urls import reverse

from multi_form_view import MultiModelFormView
# Create your views here.
class SchoolData(MultiModelFormView):
   form_classes = {
      'student_form' : StudentForm,
      'teacher_form' : TeacherForm,
   }
   template_name = 'home.html'
   def get_success_url(self):
      return reverse('home')
   def forms_valid(self, forms):
      student = forms['student_form'].save(commit=False)
      teacher=forms['teacher_form'].save(commit=False)
      return super(SchoolData, self).forms_valid(forms)

ここでは、ビューセットを作成しました 、レンダリングする2つのフォームを定義します。1つは学生フォームです。 もう1つは教師のフォームです 。レンダリングする必要のあるHTMLを定義しました。 get_success_url。でフォームが送信されたときに何をするかを定義します form_valid、 フォームデータを保存し、両方のフォームが正しいかどうかを確認します。

出力


Django –単一のビューで複数のフォームを処理する


  1. 複数のCSVファイルを単一のPandasデータフレームにマージする方法は?

    複数のCSVファイルを単一のPandasデータフレームにマージするには、read_csvを使用します。まず、必要なパンダライブラリをインポートします。ここ。 pdをエイリアスとして設定しました- import pandas as pd さて、以下が私たちのCSVファイルだとしましょう- Sales1.csv Sales2.csv パスを文字列として設定しました。両方のファイルがデスクトップにあります- file1 = "C:\\Users\\amit_\\Desktop\\sales1.csv" file2 = "C:\\Users

  2. Pandas(Matplotlib)を使用して、複数の時系列DataFrameを1つのプロットにプロットします。

    パンダを使用して複数の時系列データフレームを単一のプロットにプロットするには、次の手順を実行できます- 図のサイズを設定し、サブプロット間およびサブプロットの周囲のパディングを調整します。 時系列を使用してPandasデータフレームを作成します。 プロットの時系列インデックスを設定します。 プロットにルピーとドルをプロットします。 図を表示するには、 show()を使用します メソッド。 例 import numpy as np import pandas as pd from matplotlib import pyplot as plt, dates plt.rcParams[&qu