簡體   English   中英

django-admin-如何修改ModelAdmin一次創建多個對象?

[英]django-admin - how to modify ModelAdmin to create multiple objects at once?

假設我有非常基本的模型

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

該模型已在管理模塊中注冊:

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

目前,當我進入管理界面時,單擊“添加消息”后,只有一種表單可以輸入msg

我想在“添加頁面”上有多個表單(也許是表單集),以便可以一次創建多個消息。 每次單擊“保存並添加另一個”確實很煩人。

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

您將建議使用什么來解決此問題?

這可能不完全是您想要的,但是如果您想同時創建多個對象,則可以執行以下操作:

#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()

基本上,您正在做的是為管理模板創建自定義表單,該表單詢問用戶應創建對象多少次。 然后在save_model方法中解釋邏輯。

作為一種解決方法,因為, User可能有FK,所以可以在User模型上定義一個InlineModel

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

如果您使用內聯,這很容易。 然后,您可以使用extra = 10或您想要的許多額外的模板集。 似乎沒有與ModelAdmin等效的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)

這將為您提供在Admin視圖中想要的內容並創建分組(即使您只允許一個組),唯一的額外字段將是組模型中的name 我什至不確定您是否會需要它。 此外,我確信可以為任意值動態生成extra的值。

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM