让我们假设我有非常基本的模型
class Message(models.Model):
msg = models.CharField(max_length=30)
此模型已在管理模块中注册:
class MessageAdmin(admin.ModelAdmin):
pass
admin.site.register(Message, MessageAdmin)
目前,当我进入管理界面时,点击“添加消息”后,我只有一个表单,我可以输入msg
。
我想在“添加页面”上有多个表单(也许是formset),这样我就可以一次创建多个消息。每次点击“保存并添加另一个”真的很烦人。
理想情况下,我希望实现InlineModelAdmin
之类的功能,但事实证明,您只能将其用于与编辑对象相关的模型。
您建议使用什么来解决此问题?
答案 0 :(得分:3)
这可能不是您正在寻找的,但如果您想同时创建多个对象,您可以这样做:
#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方法中解释的。
答案 1 :(得分:1)
作为一种解决方法,因为,您可能有User
的FK,因此您可以在InlineModel
模型上定义User
。
否则,最简单的方法可能是创建自定义管理视图,因为没有显示和保存模板集的通用管理视图。
答案 2 :(得分:0)
如果您使用内联,这很容易。然后,您可以使用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)
这将在Admin视图中为您提供所需的内容并创建分组(即使您只允许一个组),并且唯一的额外字段将是组模型中的name
。我甚至不确定你是否需要那个。此外,我确信可以为任意值动态生成extra
的值。
我希望这有帮助!