Limit the queryset of entries displayed for a django admin Inline(限制为 django admin 内联显示的条目的查询集)
问题描述
In django admin, using django 1.2, i'm trying to add a InlineModelAdmin to apply a comment on save when a change is made to an entry. (An entry is expected to have a "ChangeComment" for every edit).
I don't want to show previous entries, so I am trying to force the ChangeCommentInline's formset.queryset to be empty, by creating NoCommentsInlineFormset and assigning the formset in my ChangeCommentInline, but is still returning existing entries.
https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/#changing-the-queryset
Note - In the link above they use BaseModelFormset, I'm using BaseInlineFormset, which I expect may be the issue. If I swap out BaseInlineFormset with BaseModelFormset I get an error about "instance" not existing.
admin.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, )
Can limiting the ChangeComment entries displayed in the Inline be done, or is there a better way to handle this?
As benjaoming mentioned in the comments, it was necessary to override the get_queryset()
method in the InlineModelAdmin
. It was not necessary to override and attach a new formset to the InlineModelAdmin
definition as I initially thought.
Here is the resulting implementation:
class ChangeCommentInline(admin.StackedInline):
"""For allowing logged in user to add change comment"""
model = ChangeComment
extra = 1
exclude = ("user", ) # auto-update user field in save_formset method of parent modeladmin.
def get_queryset(self, request):
"""Alter the queryset to return no existing entries"""
# get the existing query set, then empty it.
qs = super(ChangeCommentInline, self).get_queryset(request)
return qs.none()
这篇关于限制为 django admin 内联显示的条目的查询集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:限制为 django admin 内联显示的条目的查询集


基础教程推荐
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 包装空间模型 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- 求两个直方图的卷积 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01