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.