Как правильно добавить проверенных пользователей в определенную группу? - PullRequest
0 голосов
/ 26 февраля 2020

views

У меня есть флажок, чтобы проверить пользователей, чтобы добавить их в группу. Вот если проверенный пользователь уже находится в группе, то теперь он не работает с этим кодом, но я хочу продолжить (если проверенные пользователи уже включены), добавьте оставшегося пользователя в группу и оставьте уже добавленного пользователя без изменений.

Выдает эту ошибку, если проверенные пользователи уже находятся в группе

Не удалось выполнить ограничение UNIQUE: user_registration_user_groups.user_id, user_registration_user_groups.group_id

def assign_users_to_group(request, pk):
        group = get_object_or_404(Group, pk=pk)
        if request.method == 'POST':
            users = request.POST.getlist('users')
            for user in users:
                if user in group.user_set.all():
                    pass
                group.user_set.add(user)
            messages.success(request, 'users added to this group')
            return redirect('user_groups:view_group_detail', group.pk)

ОБНОВЛЕНИЕ с ответом Nafees Anwar

def assign_users_to_group(request, pk):
    group = get_object_or_404(Group, pk=pk)
    if request.method == 'POST':
        users = request.POST.getlist('users')
        for user in users:
            try:
                group.user_set.add(user)
            except IntegrityError as e:
                if user not in group.user_set.all():
                    raise e
        messages.success(request, '{} user added to this group')
        return redirect('user_groups:view_group_detail', group.pk)

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020
def assign_users_to_group(request, pk):
    group = get_object_or_404(Group, pk=pk)
    if request.method == 'POST':
        users = request.POST.getlist('users')
        for user in users:
            if not user.groups.filter(name=group.name).exists():
                group.user_set.add(user)
        messages.success(request, 'users added to this group')
        return redirect('user_groups:view_group_detail', group.pk)
0 голосов
/ 26 февраля 2020

Вы можете просто игнорировать, если возникает ошибка и пользователь существует.

from django.db.utils import IntegrityError

try:
    group.user_set.add(user)
except IntegrityError as e:
    if user not in group.user_set.all():
        raise e
...