Saturday, March 15, 2014

Filtering django admin inline dropdown for a foreignkey based on the parent

The original concept is explained here. But overriding the method 'formfield_for_dbfield' as in that link doesn't show up the column name. To avoid that override the 'formfield_for_foreignkey' with same logic but just build the queryset as necesssary.

Following is the snippet from my code:

class NewsBentInline(admin.TabularInline):
    model = NewsBent
           
    def __init__(self, model, admin_site, dist=False):
        self.dist = dist
        super(NewsBentInline, self).__init__(model, admin_site)
           
    def formfield_for_foreignkey(self, field, request, **kwargs):
        parent_article = self.get_object(request, Article)
        queryset = None
        if field.name == "parliament":
            if parent_article.district == 'District_name1':
                queryset = Parliament.objects.filter(dist__name="District_name1")
            else:
                queryset = Parliament.objects.all()
        if queryset is not None:
            kwargs["queryset"] = queryset
        return super(NewsBentInline, self).formfield_for_foreignkey(field, request, **kwargs)

    def get_object(self, request, model):
        object_id = request.META['PATH_INFO'].strip('/').split('/')[-1]
        return model.objects.get(pk=object_id)

No comments:

Post a Comment