2015-05-04 45 views
2

假設,作爲管理過程的一部分,數千個值是離線創建的。這些值輸入到死簡單的模型:如何向django管理頁面用戶公開批量創建?

class Foo(models.Model): 
    value = models.CharField(max_length=32) 

我想有模型創建頁面,允許用戶在輸入(複製粘貼)1000個值的一個字段,並因此,表中將創建1000行。

如果我可以添加一個文本字段到模型創建,我所要做的就是解析出這些值併爲每個值調用Foo.create。如何添加這個自由格式的字段,以及當用戶點擊保存按鈕時如何處理它? ......還是有完全不同的方式,我應該這樣做?

回答

2

我意識到我的評論更多的是現在的答案。

當然,爲什麼不呢?你甚至不需要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) 

sometemplate.html

<form method="POST"> 
    <p>Paste bulk create info.</p> 
    <textarea name="bulk-create-paste"> 
    </textarea> 
    </form>