@aeHarkonnen

Как правильно передать контекст в Django view, если объект контекста может быть не создан?

У меня есть группы, пользователь может войти в группу. Когда он просматривает страницу группы, если он в нее уже вступил, мне нужно выводить о нем самом информацию. Работает у меня это так:
class UniverseDetailView(LoggedInMixin, DetailView):
    model = Universe
    template_name = 'multiuniverse/universe_detail.html'

    def get_context_data(self, **kwargs):
        context = super(UniverseDetailView, self).get_context_data(**kwargs)
        member = Member.objects.get(user=self.request.user, uni=self.object)
        context['member'] = member
        return context

Но, если он не вступил в группу до просмотра, что вполне логично, выдается ошибка:
Exception Type: DoesNotExist
Exception Value: Member matching query does not exist.

Как можно передать этот контекст, не прибегая к get_or_create? Т.к. плодить кучу ненужных записей не хочется.
  • Вопрос задан
  • 3243 просмотра
Решения вопроса 1
@aeHarkonnen Автор вопроса
Помогли разобраться, пишем функцию на обработку исключения(DRY):

def get_or_none(model, **kwargs):
    try:
        return model.objects.get(**kwargs)
    except model.DoesNotExist:
        return None


И используем ее, вместо:
member = Member.objects.get(user=self.request.user, uni=self.object)

ставим:
member=get_or_none(Member, user=self.request.user, uni=self.object)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы