在视图函数中以只读模式实例化 django 表单

问题描述 投票:0回答:1

我有一个 django 4 表单,其中有一些小部件供用户选择一些值:

from django import forms
from .app.model import MyModel
from bootstrap_datepicker_plus.widgets import DatePickerInput

class FooForm(forms.ModelForm):
   # stuff
    class Meta:
        model = FooModel
        fields = [
            "user_id",
            "created_at",
            "some_other_field",
        ]

        widgets = {
            "user_id": forms.NumberInput(),
            "created_at": DatePickerInput(),
            "some_other_field": forms.NumberInput(),
        }

我在

views.py
文件中的几个函数中实例化了该表单:

my_form_instance = forms.FooForm(
    data=data,
    user=request.user,
)

一个功能

create_or_edit_foo()
用于创建新记录或编辑现有记录。另一个功能
delete_foo()
用于删除记录。在删除功能(由特定端点
/foo/12/delete
使用)中,我想以只读模式显示表单。

我怎样才能实现这一目标?

我知道我可以在每个小部件中添加

attrs={'readonly': True,}
以使其不可编辑。 但这也适用于我的视图中 create_or_edit 函数使用的表单实例。

我在 Ubuntu 22.04 上使用 django 4.2 和 Python 3.10.6。

python django django-forms readonly django-widget
1个回答
0
投票

为什么不对表单进行子类化以创建特定于删除的版本

class MyDeleteForm(MyForm):
   def __init__(self, *args, *kwargs):
       super().__init__(*args, **kwargs)
       # set your read-only attributes here

然后在删除视图中,使用

MyDeleteForm

© www.soinside.com 2019 - 2024. All rights reserved.