@MrCute
Студент

Как оптимизировать даный код представления Django?

Делаю на сайте группы, написал представление для инвайта человека в группу по логину. На форме есть select из списком логинов, и кпопка для отправления.

invite.html
<form method="post" action="">
    {% csrf_token %}
    {% if inv_inf %}
    {{ inv_inf }} <br><br>
    {% endif %}
    {{ form.to_user.label }}: {{ form.to_user }}
    <input type="submit" value="Invite">
</form>


Код ниже мне не очень нравится, и я не уверен у его правильности. Прошу помочь мне его оптимизировать и исправить неправильные участки.

views.py
def invite_to_group(request, g_id):

    inv_inform = ''

    if request.method == 'POST':

        form = InviteUserToGroupForm(request.POST)
        if form.is_valid():
            to_user = User.objects.get(username=form.cleaned_data.get('to_user'))
            g = GroupExt.objects.get(id=g_id)   # GroupExt - разширеная группа Django с доп. полями
            g_members = User.objects.filter(groups=g)

            if to_user.username == request.user.username:
                inv_inform += 'Нене, себя ты не пригласишь'
                return render(request, template_name='invite.html', context={'form': form, 'inv_inf': inv_inform})

            if to_user in g_members: 
                inv_inform += 'Пользователь уже состоит в группе'
                return render(request, template_name='invite.html', context={'form': form, 'inv_inf': inv_inform})

            try:
                inv = Invite.objects.get(to_user=to_user, group=g)  # Invite - модель приглашения пользователя в группу
                inv_inform += 'Приглашение уже отправлено!'
                return render(request, template_name='invite.html', context={'form': form, 'inv_inf': inv_inform})
            except MultipleObjectsReturned:
                inv_inform += 'Приглашение уже отправлено!'
                return render(request, template_name='invite.html', context={'form': form, 'inv_inf': inv_inform})

            except Invite.DoesNotExist:
                inv = Invite.objects.create(to_user=to_user, group=g)
                inv.save()
                inv_inform += 'Отправлено!'
                return render(request, template_name='invite.html', context={'form': form, 'inv_inf': inv_inform})

    form = InviteUserToGroupForm()

    return render(request, template_name='invite.html', context={'form': form})
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
@deliro
Такие вещи нужно делать при валидации формы с помощью методов clean_some_field (clean - префикс).
Также придётся немного переопределить инициализацию формы, она будет выглядеть примерно так:
def __init__(self, user, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.user = user


Чтобы прокинуть из вьюхи request.user'а в форму и потом внутри формы валидировать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы