将参数传递给 Django 元类



我也可以创建不同类型的表单,但这很乏味。 那么是否可以将类型传递给表单,然后相应地显示表单? 此代码显示NameError: name 'review_type' is not defined

class Contest1_for_review(ModelForm, review_type):
class Meta:
model = Contest1
decision = review_type + '_decision'
comment = review_type +'comment'
fields = [
decision,
comment,
]

是否可以像这样将参数传递给元类?

表单是一个类,当它在 HTML 中呈现时,它呈现的是表单类的实例。因此,在将值传递给该实例时,可以使用其__init__方法。例如:

class Contest1_for_review(ModelForm):
def __init__(self, *args, **kwargs):
review_type = kwargs.pop('review_type')  # <-- getting the value from keyword arguments
super().__init__(*args, **kwargs)
self.fields[f'{review_type}_decision'] = forms.CharField()
self.fields[f'{review_type}_comment'] = forms.CharField()
class Meta:
model = Contest1
fields = "__all__"

此外,您需要将review_type的值从视图发送到窗体。在基于函数的视图中像这样:

form = Contest1_for_review(review_type="my_value")

或者使用get_form_kwargs从基于类的视图发送值。仅供参考:您无需在元类中更改任何内容。


更新:

从注释中的讨论来看,OP 应该使用forms.Form而不是ModelForm因为使用模型形式需要类Meta字段/exclude 值。

相关内容

  • 没有找到相关文章

最新更新