首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django bulk_create CreateView

Django bulk_create CreateView
EN

Stack Overflow用户
提问于 2018-05-30 09:57:49
回答 1查看 1.2K关注 0票数 0

我有我的models.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
{{form.as_p}}

此表单只能进行一次输入。但是,我需要在单个表单中使用不同的名称和日期执行3次输入(在我的情况下)。

表单可能看起来像这样

代码语言:javascript
复制
{{form.as_p}}    
{{form.as_p}}
{{form.as_p}}

我查看了一些文档,发现bulk_create可以在一次运行中完成多个输入,但我不知道如何处理我的template.html

EN

回答 1

Stack Overflow用户

发布于 2018-05-30 12:02:27

一个演示给你:

views.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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__

模板

代码语言:javascript
复制
<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>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50595330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档