python - 在基于类的视图中自动填写表格
问题描述
我想在基于类的视图中自动填写一些表格并保存在数据库中。
在我看来发布功能
def post(self, request, *args, **kwargs):
form_2 = self.form_class_2(self.request.POST)
if form_2.is_valid():
keyword = form_2.cleaned_data['keyword']
books = self.search(keyword)
if books:
for book in books:
title = self.add_title(book)
form = self.form_class(initial={"title": title})
if form.is_valid():
form.save()
else:
return HttpResponseRedirect(reverse_lazy('add_books'))
return HttpResponseRedirect(reverse_lazy('import_books'))
else:
return HttpResponseRedirect(reverse_lazy('index_books'))
return reverse_lazy('import_books')
我的表格
class BookForm(forms.ModelForm):
class Meta:
model = Book
exclude = ()
我的表格_2
class SearchBookForm(forms.Form):
keyword = forms.CharField(max_length=100)
我的模型
class Book(models.Model):
title = models.CharField(
max_length=75,
verbose_name='Book title')
published_date = models.CharField(
max_length=10,
validators=[check_if_value_is_date, max_year_validator],
blank=True,
null=True,
verbose_name='Publishing date')
pages = models.IntegerField(
validators=[check_if_value_is_negative],
blank=True,
null=True,
verbose_name='Number of pages')
language = models.CharField(
max_length=2,
blank=True,
null=True,
verbose_name='Language')
这就是我的表单在验证之前的样子:
<tr><th><label for="id_title">Book title:</label></th><td><input type="text" name="title" value="Harry Potter i Kamień F
ilozoficzny" maxlength="75" required id="id_title"></td></tr>
<tr><th><label for="id_published_date">Publishing date:</label></th><td><input type="text" name="published_date" maxleng
th="10" id="id_published_date"></td></tr>
<tr><th><label for="id_pages">Number of pages:</label></th><td><input type="number" name="pages" id="id_pages"></td></tr
>
<tr><th><label for="id_language">Language:</label></th><td><input type="text" name="language" maxlength="2" id="id_langu
age"></td></tr>
基本上我有两种形式。表格 2 用于输入在我的搜索函数中用作参数的值。然后这个搜索函数返回.json,然后我从这个.json中获取一些值并分配给“title”然后这个title是我表单的初始数据。在验证之前一切正常。我的表单无效,但是当我在验证部分之前打印表单时,我看到我的初始数据符合预期。
解决方案
默认情况下,Django 要求您填写表单中的字段。因此BookForm
要求您在表格中填写标题、发布日期、页数和语言。form
您在不传递实际输入的情况下进行实例化。是的,你传入了初始值,但你没有传入request.POST
它(根据这里的内容)。所以你的表单实例化应该看起来像
form = self.form_class({'title': title, 'published_date': book.published_date, 'pages': book.pages, 'language': book.language})
推荐阅读
- java - OKTA 多因素身份验证 + Java + RestAssured:/authorize API 调用将我引导回登录页面
- javascript - 如果使用 document.documentElement.scrollTop 向下滚动页面会晃动
- sql - 如何进行选择以将记录相对于彼此放在另一个下方
- xamarin - 如何使用渲染器更改 Android 选项卡的背景颜色,同时使用自定义渲染器添加一些填充
- arduino - 如何让nodemcu自动连接强wifi信号
- laravel - Laravel如何从数据库中获取不同的数据?
- android - 在 C++ 中为 Android 应用程序编码 ASCII
- java - 从 CSV 到数组的字符串(Java)
- javascript - 为什么只有我的第一个路由器渲染组件?第二个路由器没有渲染
- python - 输入不触发 if 语句