Search code examples
djangoadmin

Django admin:custom search


i have tow model:

class Site_Posts(models.Model):
    title = models.CharField(max_length=300,default='')
    ...
    def __unicode__(self):
        return self.title

class Comment(models.Model):
    post_title = models.ForeignKey(Site_Posts,null=True)
    post_id = models.IntegerField(null=True,default=None)
    ...

class Comment_Admin_Form(admin.ModelAdmin):
    model = Comment
    search_fields = ('content','post_title__title',)
    ...

i want to show all comment that post_title field's is equal to text of admin search box widget,but now displayed just one(Whereas there are exist many item)


Solution

  • you are should overwriteget_search_results method in your ModelAdmin class as below:

    class X_Admin_Form(admin.ModelAdmin):
        def get_search_results(self, request, queryset, search_term):   # for customize search_list
            queryset,use_distinct = super(X_Admin_Form, self).get_search_results(request,queryset,search_term)
            try:
                b = Site_Posts.objects.filter(title__icontains=search_term)
                ll = []
                for item in b:
                   ll.append(item.id)
                condition = Q(post_id__in=ll) | Q(another_field=search_term)
                queryset |= self.model.objects.filter(condition)
    
            except:
                pass
    
            return queryset, use_distinct