将参数传递给Django元类

2024-06-27 09:19:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我也可以创建不同类型的表单,但这很乏味。 那么,是否可以将类型传递给表单,然后相应地显示表单? 此代码显示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,
        ]

有可能像这样把一个参数传递给元类吗?你知道吗


Tags: 代码name表单类型foristypecomment
1条回答
网友
1楼 · 发布于 2024-06-27 09:19:50

Form是一个类,当它在HTML中呈现时,它的呈现就是Form类的一个实例。因此,当向该实例传递值时,可以使用它的__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")

或者使用^{}从基于类的视图发送值。仅供参考:你不需要在Meta类中更改任何内容。你知道吗


更新:

根据注释中的讨论,OP应该使用forms.Form而不是ModelForm,因为使用模型形式需要Meta类中的字段/排除值。你知道吗

相关问题 更多 >