[英]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.