簡體   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