Limit the queryset of entries displayed for a django admin Inline

前端 未结 2 1945
鱼传尺愫
鱼传尺愫 2020-12-10 04:21

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 \"Chan

相关标签:
2条回答
  • 2020-12-10 04:41

    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()  
    
    0 讨论(0)
  • 2020-12-10 04:46

    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.

    0 讨论(0)
提交回复
热议问题