您如何向 django 管理页面用户公开批量创建?

Sni*_*gus 4 django model bulk

假设,作为管理流程的一部分,离线创建了数千个值。这些值被输入到一个非常简单的模型中:

 class Foo(models.Model):
     value = models.CharField(max_length=32)
Run Code Online (Sandbox Code Playgroud)

我想在模型创建页面上有一个字段,允许用户输入(复制粘贴)1000 个值,因此,将在表中创建 1000 行。

如果我可以在模型创建中添加一个文本字段,我所要做的就是解析这些值并为每个值调用 Foo.create。我将如何添加此自由格式字段,以及当用户点击“保存”按钮时我将如何处理它?……或者我应该采取完全不同的方式来解决这个问题吗?

Yuj*_*ita 5

我意识到我的评论现在更像是一个答案。

当然,为什么不呢?为此,您甚至几乎不需要 django。您可以创建一个<textarea name="foo"></textarea>, 并在您的视图中按换行符解析数据。

通过 Admin.get_urls 创建自定义管理视图并为批量创建页面编写自定义视图。

https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls

这是从现场示例中复制并粘贴的 get_urls

class MyModelAdmin(admin.ModelAdmin):
    def get_urls(self):
        urls = super(MyModelAdmin, self).get_urls()
        my_urls = [
            url(r'^my_view/$', self.my_view),
        ]
        return my_urls + urls

    def my_view(self, request):
        # ...
        context = dict(
           # Include common variables for rendering the admin template.
           self.admin_site.each_context(request),
           # Anything else you want in the context...
        )
        if request.method == 'POST':
          for line in request.POST['bulk-create-paste'].split('\n'):
            Foo.objects.create(myfield=line)
        return TemplateResponse(request, "sometemplate.html", context)
Run Code Online (Sandbox Code Playgroud)

一些模板.html

  <form method="POST">
    <p>Paste bulk create info.</p>
    <textarea name="bulk-create-paste">
    </textarea>
  </form>
Run Code Online (Sandbox Code Playgroud)