[英]Django bulk_create CreateView
我有我的models.py
class Schedule(models.Model):
name = models.CharField(max_length=255)
date_from = models.DateField('')
date_to = models.DateField('', null=True)
desc = models.TextField(blank=True, null=True)
这是我的views.py
class Schedule(CreateView):
fields = ()
model = models.Schedule
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.save()
return super(ModelFormMixin, self).form_valid(form)
这是我的template.html
{{form.as_p}}
此表格只能输入1次。 但是我需要用不同的名称和日期(以我的情况为准)以单一形式执行3次输入。
和形式可能看起来像
{{form.as_p}}
{{form.as_p}}
{{form.as_p}}
我检查了文档,那里bulk_create可以在一次运行中进行多个输入,但是我不知道如何处理我的template.html
为您演示:
views.py
from django import forms
from django.shortcuts import render, HttpResponse
from .models import Schedule
class ScheduleForm(forms.ModelForm):
class Meta:
model = Schedule
fields = "__all__"
def multicreate(request):
if request.method == "POST":
forms = [
ScheduleForm(dict(name=n, date_from=df, date_to=dt, desc=ds))
for n, df, dt, ds in zip(
request.POST.getlist("name"),
request.POST.getlist("date_from"),
request.POST.getlist("date_to"),
request.POST.getlist("desc"),
)
]
if all(forms[i].is_valid() for i in range(len(forms))):
for form in forms:
form.save()
return HttpResponse(
f"success to create {len(forms)} Schedule instances."
)
else:
forms = [ScheduleForm() for _ in range(3)]
return render(request, "create.html", {"forms": forms})
models.py
from datetime import date
from django.db import models
class Schedule(models.Model):
name = models.CharField(max_length=255)
date_from = models.DateField("date from", default=date.today)
date_to = models.DateField("date to", default=date.today)
desc = models.TextField(blank=True, null=True)
def __str__(self):
return self.name or self.__class__.__name__
模板
<form method='post'>{% csrf_token %}
{% for form in forms %}
{{ form.Meta.model }} {{ forloop.counter }}<br>
{{ form.as_p }}
-------------------------------------------<br>
{% endfor %}
<input type='submit', value='OK'>
</form>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.