繁体   English   中英

Django bulk_create CreateView

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM