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
1 ответ
Демо для вас:
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>