ModelFormSet

发布时间 2023-07-10 10:23:25作者: 花生与酒

 

1、使用ModelFormSet,一般都要设定default数,方法如下

class Memo(models.Model):
    title = models.CharField('タイトル', max_length=20)
    text = models.TextField('内容')
class MemoForm(ModelForm):
    class Meta:
        model = Memo
        fields = ('title', 'text')

 

from django.forms import ModelForm, BaseModelFormSet, modelformset_factory
from apps.memo.models import Memo
class BaseMemoFormSet(BaseModelFormSet):
    def __init__(self, *args, **kwargs):
        # MemoView传参
        title = kwargs.pop('title')
        super().__init__(*args, **kwargs)
        # 初期値设定
        self.queryset = Memo.objects.filter(title__startswith=title)
MemoFormSet = modelformset_factory(Memo, Form=MemoForm, formset=BaseMemoFormSet)

view中,使用modelFormSet时候,传递title参数

class MemoView(TemplateView):
    model = Memo
    template_name = "memo/template.html"

    def get_context_data(self, *args, **kwargs, request)
        context = super().get_context_data(self, *args, **kwargs, request)
        # 向MemoFormSet传递title参数
        context['formset'] = MemoFormSet('title'='test') 
        return context