2010-06-07 72 views
8

讓我們假設我有django-admin - 如何修改ModelAdmin一次創建多個對象?

class Message(models.Model): 
     msg = models.CharField(max_length=30) 

這種模式與管理模塊註冊非常基本的模式:

class MessageAdmin(admin.ModelAdmin): 
    pass 
admin.site.register(Message, MessageAdmin) 

目前,當我進入管理界面,點擊「添加消息」後,我只有一種形式,我可以輸入msg

我想在「添加頁面」上有多個窗體(formset也許),所以我可以一次創建多個消息。每次點擊「保存並添加另一個」真的很煩人。

理想情況下,我想實現類似InlineModelAdmin的事情,但事實證明,您只能將其用於與編輯的對象相關的模型。

你會推薦什麼來解決這個問題?

回答

1

作爲解決方法,由於您很可能已將FK設置爲​​User,因此您可以在User模型上定義InlineModel

否則,最簡單的方法可能是創建自定義管理視圖,因爲沒有顯示和保存表單集的通用管理視圖。

+0

不幸的是,我沒有在這個模型中的任何FK,所以這不適合我。我會發現是否可以將自定義視圖插入到django的管理員中。 – skrobul 2010-06-09 09:40:28

3

這可能不是正是你所尋找的,但如果你想在你可以同時創建多個對象somehthing這樣的:

#In /forms.py 
MessageAdminForm(forms.ModelForm): 
    msg = CharField(max_length=30) 
    count = IntegerField() 

#In /admin.py 
from app.admin import MessageAdminForm 
MessageAdmin(admin.ModelAdmin): 
    form = MessageAdminForm 
    fieldsets = (
     (None, { 
      'fields' : ('msg','count')  
     }),) 
    def save_model(self, request, obj, form, change): 
     obj.msg = form.cleaned_data['msg'] 
     obj.save() 
     for messages in range(form.cleaned_data['count']): 
      message = Message(msg=form.cleaned_data['msg']) 
      message.save() 

Basicly你正在做的是創建一個自定義形式爲您的管理員模板,它要求用戶多少次創建對象。該邏輯不是在save_model方法中解釋的。

+0

這將工作,但只適用於非常簡單的管理形式。例如,如果管理員中有內聯,那麼Pandemonium! – frnhr 2014-09-05 00:14:59

0

如果您使用Inline,這很容易。然後你可以使用extra = 10或者你想要的許多額外的表單。似乎沒有ModelAdmin的等價物。

當然,在您的消息模型中,您需要創建一個ForeignKey以將某種消息分組模型作爲另一個函數層並獲取您正在查找的多表單佈局。

例如:

models.py: 
    class Group(models.Model): 
     name = models.CharField(max_length=30) 
    class Message(models.Model): 
     msg = models.CharField(max_length=30) 
     grp = models.ForeignKey(Group) 

admin.py: 
    class MessageInline(admin.TabularInline): 
     model = Message 
     extra = 10 
    class GroupAdmin(admin.ModelAdmin): 
     inlines = [MessageInline] 
    admin.site.register(Group, GroupAdmin) 

這將會給你的管理視圖想要什麼,並創建分組(即使你只允許一組)和唯一的額外場是該組中的name模型。我甚至不確定你會需要這個。另外我確定extra的值可以爲任意值動態生成。

我希望這有助於!

相關問題