~对用户请求的数据进行校验 生成HTML标签 PS: -form对象是一个可迭代对象。 -问题:choc的数据如果从数据库获取可能会造成数据无法实时更新 重写构造方法,在构造方法中重新去数据库获取值。 -ModelChoiceField字段
时间: 2024-01-22 17:19:36 浏览: 79
可以使用Django的表单验证功能来对用户请求的数据进行校验,并且可以通过模板引擎生成HTML标签。
以下是一个示例代码,其中包含了一个重写构造方法的ModelForm,它可以在每次初始化时重新从数据库中获取数据:
```python
from django import forms
from .models import Chocolate
class ChocolateForm(forms.ModelForm):
class Meta:
model = Chocolate
fields = '__all__'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['choco_type'] = forms.ModelChoiceField(
queryset=Chocolate.objects.all(),
empty_label=None
)
```
在这个重写构造方法中,我们将 `choco_type` 字段替换为了一个 `ModelChoiceField`,它会从数据库中获取所有的 Chocolate 对象,并作为一个下拉列表提供给用户选择。 `empty_label=None` 参数表示必须选择一个选项。
在视图函数中,我们可以根据用户提交的数据创建一个表单实例,并使用 `is_valid()` 方法进行校验:
```python
from django.shortcuts import render
from .forms import ChocolateForm
def my_view(request):
if request.method == 'POST':
form = ChocolateForm(request.POST)
if form.is_valid():
# 处理合法的表单数据
...
else:
form = ChocolateForm()
return render(request, 'my_template.html', {'form': form})
```
在模板中,我们可以使用表单对象的 `as_p()`、`as_table()`、`as_ul()` 等方法生成HTML标签,例如:
```html
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">提交</button>
</form>
```
这将生成一个包含所有表单字段的HTML表单,每个字段都包含一个<label>标签和一个<input>标签。
阅读全文