14👍
✅
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()
3👍
I am supposing you are using a
models.ForeignKey(EntryAdmin)
in your ChangeComment model. but if you want only one comment for each EntryAdmin, your should use instead a:
models.OneToOneField(EntryAdmin)
And you won’t need your NoCommentsInlineFormset nor your inline class.
That’s what I would do.
EDITED
Ok then if you want to keep a history of comments, you could override the queryset in the NoCommentsInlineFormset
as:
def __init__(self, *args, **kwargs):
super(NoCommentsInlineFormset, self).__init__(*args, **kwargs)
self.queryset = ChangeComment.objects.order_by('-created_at')[:1]
This should work.
- What does related_name do?
- Convert python datetime with timezone to string
- Pylint recursively for a given filename
- How to add some extra fields to the page in django-cms? (in django admin panel)
Source:stackexchange.com