在django admin中,使用django a 1.2,我试图添加一个InlineModelAdmin,以便在对条目进行更改时对save应用注释。(每个编辑条目都应该有一个“ChangeComment”)。
我不想显示以前的条目,所以我试图通过创建NoCommentsInlineFormset并在我的ChangeCommentInline中分配表单集,将ChangeCommentInline的formset.queryset强制为空,但仍在返回现有条目。
https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/#changing-the-queryset
注意-在上面的链接中,他们使用的是BaseModelFormset,我使用的是BaseInlineFormset,这可能是问题所在。如果我将BaseInlineFormset与BaseModelFormset交换,我会得到一个关于“instance”不存在的错误。
管理py
class NoCommentsInlineFormset(models.BaseInlineFormset):
def __init__(self, *args, **kwargs):
super(NoCommentsInlineFormset, self).__init__(*args, **kwargs)
self.queryset = ChangeComment.objects.none()
class ChangeCommentInline(admin.StackedInline):
model = ChangeComment
extra = 1
exclude = ("user", )
formset = NoCommentsInlineFormset
def save_model(self, request, obj, form, change):
"""auto-assign logined in user to comment"""
if not change:
obj.user = request.user
obj.save()
class EntryAdmin(admin.ModelAdmin):
inlines = (ChangeCommentInline, )
是否可以限制内联中显示的ChangeComment条目,或者是否有更好的方法来处理此问题?
我想你用的是
在ChangeComment模型中。但是,如果每个EntryAdmin只需要一个注释,则应该使用:
你不需要你的NoCommentsInlineFormset或者你的内联类。 那就是我要做的。
编辑
好,那么如果您想保留注释的历史记录,可以重写NoCommentsInlineFormset中的queryset 作为:
这应该管用。
正如benjaoming在评论中提到的,有必要重写
InlineModelAdmin
中的get_queryset()
方法。没有必要像我最初所想的那样重写并将新的表单集附加到InlineModelAdmin
定义。以下是最终的实现:
相关问题 更多 >
编程相关推荐