Django: расширить get_object для представлений на основе классов

Поскольку я не являюсь экспертом в программировании на Python, я ищу отзывы о том, как я расширил метод get_object класса SingleObjectMixin Django.

Для в большинстве моих подробных представлений поиск с помощью pk или slugfield прекрасен, но в некоторых случаях мне нужно получить объект на основе других (уникальных) полей, например "имя пользователя". Я создал подклассы DetailView в Django и изменил метод get_object следующим образом:

# extend the method of getting single objects, depending on model
def get_object(self, queryset=None):

    if self.model != mySpecialModel:
        # Call the superclass and do business as usual 
        obj = super(ObjectDetail, self).get_object()
        return obj

    else:
        # add specific field lookups for single objects, i.e. mySpecialModel
        if queryset is None:
            queryset = self.get_queryset()

        username = self.kwargs.get('username', None)
        if username is not None:
            queryset = queryset.filter(user__username=username)
        # If no username defined, it's an error.
        else:
            raise AttributeError(u"This generic detail view %s must be called with "
                                 u"an username for the researcher."
                                 % self.__class__.__name__)

        try:
            obj = queryset.get()
        except ObjectDoesNotExist:
            raise Http404(_(u"No %(verbose_name)s found matching the query") %
                          {'verbose_name': queryset.model._meta.verbose_name})
        return obj

Это хорошая практика? Я пытаюсь создать один подкласс Detailview, который приспосабливается к различным потребностям, когда нужно получить разные объекты, но который также поддерживает поведение по умолчанию для общих случаев. Или лучше иметь больше подклассов для особых случаев?

Спасибо за совет!

7
задан Gregor 22 July 2011 в 11:13
поделиться