我有一个 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。
为什么不对表单进行子类化以创建特定于删除的版本
class MyDeleteForm(MyForm):
def __init__(self, *args, *kwargs):
super().__init__(*args, **kwargs)
# set your read-only attributes here
然后在删除视图中,使用
MyDeleteForm