Example of passing parameters to form in django view

  • 2021-07-22 10:40:01
  • OfStack

The form form in django will appear, and the field information parameter in non-form will be required when form is verified or saved. For example, when recording operations, we need to set the recorded operator as the current user, so in view, we need to pass the information of user into form, which is convenient for use in form. save () d.

models


# models.py

from django.db import models
from django.contrib.auth.models import User


class Record(models.Model):

 user = models.ForeignKey(User, on_delete=models.CASADE, verbose_name=' Operator ')
 operate = models.CharField(max_length=20, verbose_name=' Operation ')

We create an record model with user and operate 2 field.

forms


# forms.py

from django import forms

from .models import Record


class RecordForm(forms.ModelForm):

 def __init__(self, *args, **kwargs):
  self.user = kwargs.pop('user')
  super().__init__(*args, **kwargs)

 def save(self, commit=True):
  instance = super().save(commit=False)
  instance.user = self.user
  if commit:
   instance.save()
  return instance

 class Meta:
  model = Record
  fields = ['operate', ]

In form, we first use ModelForm to make it easy for us to convert the form directly to model and save it. We save the passed user as a parameter in the __init__ method and take it out and use it in the save method.

views


# views.py

from django.views.generic import FormView

from .forms import RecordForm


class RecordView(FormView):
 form_class = RecordForm

 def get_form_kwargs(self):
  kwargs = super().get_form_kwargs()
  kwargs.update({
   'user': self.request.user,
  })
  return kwargs

 ...

We pass in the parameter variable for user at get_form_kwargs, so that the 1 parameter can be obtained in form.


Related articles: