怎么设置modelform里面的 {{ form }}为不可修改的输入框
时间: 2024-03-14 15:46:10 浏览: 24
你可以在定义ModelForm的时候,为需要设为不可修改的字段设置`disabled`属性。例如:
```python
from django import forms
from .models import MyModel
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 设置不可修改的输入框
self.fields['my_field'].widget.attrs['disabled'] = True
```
这里假设`MyModel`是你的模型,`my_field`是你需要设置为不可修改的字段。在`__init__`方法中,我们为`my_field`字段的widget设置了`disabled`属性,这样在前端就会显示为不可修改的输入框。
相关问题
Djangoform 和 modelform
Django中的Form类是用于处理表单数据的类,而ModelForm是Form类的一个特殊版本,它可以自动根据模型类生成表单。下面是它们的一些区别和使用场景:
1. Form类可以用于处理任何表单数据,无论是来自数据库还是用户提交的数据。而ModelForm只能处理与模型类相关的表单数据。
2. ModelForm可以直接从模型类中生成表单字段,这样可以减少编写表单代码的工作量。Form类需要手动定义每个表单字段。
3. ModelForm在处理表单数据时,可以直接将数据存储到数据库中。而Form类需要手动编写保存表单数据的代码。
使用场景:
1. 如果需要对表单数据进行一些自定义的验证逻辑,或者需要处理与模型类无关的表单数据,那么应该使用Form类。
2. 如果需要快速生成与模型类相关的表单,并且不需要对表单进行太多的自定义操作,那么应该使用ModelForm。
django modelform 选择框设置内容
在 Django 的 ModelForm 中,你可以通过在表单字段上使用 `choices` 参数来设置选择框的内容。`choices` 参数是一个由元组组成的列表,每个元组包含两个值:选项的值和显示在选择框中的标签。
例如,假设你有一个名为 `Category` 的模型,它有一个名为 `name` 的字段。你想要在一个表单中使用一个选择框来选择 `Category` 实例,可以使用如下的代码:
```python
from django import forms
from .models import Category
class CategoryForm(forms.ModelForm):
class Meta:
model = Category
fields = ['name']
widgets = {
'name': forms.Select(choices=[(category.name, category.name) for category in Category.objects.all()])
}
```
在上面的代码中,我们使用了 `forms.Select` 部件来渲染 `name` 字段,并将 `choices` 参数设置为一个包含 `Category` 实例名称的元组列表。这样,表单中的 `name` 字段将显示为一个选择框,其中选项的值和标签都是 `Category` 实例的名称。
当然,你可以根据你的需求自定义 `choices` 参数的值,例如使用 `id` 作为选项的值而不是名称。