Python Django表单-在提交时指定模型表单模型?

Python Django表单-在提交时指定模型表单模型?,python,django,django-forms,django-class-based-views,Python,Django,Django Forms,Django Class Based Views,我正在创建一个表单,可以根据用户从不同视图选择的模型将数据保存到四个表中的一个表中。但我不想为每个模型创建相同的表单 当用户单击submit时,是否有方法将模型名称传递给表单 代码如下: models.py class TagModel(MP_Node): slug = models.SlugField(max_length=64, blank=True) name = models.CharField(max_length=64) generic_objecttag_

我正在创建一个表单,可以根据用户从不同视图选择的模型将数据保存到四个表中的一个表中。但我不想为每个模型创建相同的表单

当用户单击submit时,是否有方法将模型名称传递给表单

代码如下:

models.py

class TagModel(MP_Node):
    slug = models.SlugField(max_length=64, blank=True)
    name = models.CharField(max_length=64)

    generic_objecttag_set = GenericRelation('ObjectTag')

    def __str__(self):
        return self.name

    class Meta:
        unique_together = (
            ('slug',),
        )
        abstract = True


class Concept(TagModel):
    class Meta:
        verbose_name = 'Concepts'


class Difficulty(TagModel):
    class Meta:
        verbose_name = 'Difficulty'

class QuestionType(TagModel):
    class Meta:
        verbose_name = 'Question Type'

class QuestionFormat(TagModel):
    class Meta:
        verbose_name = 'Question Format'
forms.py

class TagModelForm(forms.ModelForm):
    def clean(self):
        cleaned_data = super(TagModelForm, self).clean()
        cleaned_data['slug'] = slugify(cleaned_data.get('name', ''))
        return cleaned_data

    class Meta:
        model = models.TagModelForm
        fields = ('slug', 'name',)
        widgets = {
            'slug': forms.HiddenInput(),
        }
views.py

class TagCreateView(FormView):
    form_class = forms.TagModelForm
    template_name = 'tags/create.html'


    @method_decorator(permission_required('tags.add_tag'))
    def dispatch(self, request, *args, **kwargs):
        arg_model = kwargs.get('tree_name', None)
        if arg_model:
            self.curr_model = get_model('tags', arg_model)
        return super(TagCreateView, self).dispatch(request, *args, **kwargs)

    def form_valid(self, form):
        data = form.cleaned_data
        curr_model = self.curr_model
        curr_model.add_root(**data)
        return super(TagCreateView, self).form_valid(form)

    def get_success_url(self):
        return reverse('tags:index')

我肯定会尝试表单继承,并执行以下操作:

class TagForm(forms.ModelForm):
    def clean():
        #...
    # whatever other methods here, etc.


class ConceptTagForm(TagForm):
    class Meta:
        model = models.Concept

class DifficultyTagForm(TagForm):
    class Meta:
        model = models.Difficulty
# etc

我不确定这是否可能。听起来使用表单继承更好。尝试重写窗体的
\uuuuu init\uuuu
方法<代码>定义初始化(self,data,*args,**kwargs):self.\u meta.model=super(TagModelForm,self.\uu初始化(data,*args,**kwargs)谢谢。我需要实例化表单并从视图中传递模型吗?从视图上看,我实际上是如何做到这一点的?