SRJ9/django-driver27

View on GitHub
driver27/admin/filters.py

Summary

Maintainability
A
55 mins
Test Coverage
from django.contrib import admin
from django.db.models import Q
from ..models import Team, GrandPrix, Seat, Race


class CompetitionFilterInline(admin.TabularInline):
    def get_formset(self, request, obj=None, **kwargs):
        formset = super(CompetitionFilterInline, self).get_formset(request, obj, **kwargs)
        formset.request = request
        return formset

    @staticmethod
    def seat_for_foreignkey(obj):
        if isinstance(obj, Race):
            return obj.seats.all()
        raise NotImplementedError('Not implemented method')

    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
        if getattr(request, '_obj_', None):
            obj = request._obj_
            if hasattr(obj, 'competition'):
                if db_field.name == 'team' and not isinstance(obj, Team):
                    kwargs['queryset'] = Team.objects.filter(competitions__exact=obj.competition)
                elif db_field.name == 'grand_prix' and not isinstance(obj, GrandPrix):
                    kwargs['queryset'] = GrandPrix.objects.filter(competitions__exact=obj.competition)
            elif db_field.name == 'seat' and not isinstance(obj, Seat):
                kwargs['queryset'] = self.seat_for_foreignkey(obj)
        return super(CompetitionFilterInline, self).formfield_for_foreignkey(db_field, request, **kwargs)