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