Исключить пользователя экземпляра из автозаполнения Django

Я пытаюсь сделать 3 вещи. 1) исключить пользователя экземпляра из выпадающего списка автозаполнения django, 2) ограничить выбор этого пользователя (в бэкэнде) и 3) настроить сообщение проверки, если выбран этот пользователь. На данный момент у меня есть #2, который, кажется, работает, но я не могу понять, как изменить сообщение об ошибке проверки и как исключить его из выпадающего списка все вместе. Вот мой код:

forms.py

class UserSurveyQueueForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        super().__init__(*args, **kwargs)
        self.fields['queue'].queryset = User.objects.all().exclude(pk=user)

    class Meta:
        model = UserSurveyQueue
        fields = ('queue',)
        widgets = {
            'queue': autocomplete.ModelSelect2Multiple(
                url='user-autocomplete',
            ),
        }

views.py

class UserAutocomplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        if not self.request.user.is_authenticated:
            return User.objects.none()
        # Here is where I want to remove the instance user from the list of available options
        qs = User.objects.all()
        if self.q:
            qs = qs.filter(username__icontains=self.q)
        return qs


def set_user_queue(request, username):
    u = get_object_or_404(User, username=username)
    employee = Employees.objects.filter(employee_id=u.id)
    # Get current user's queue to display as instance
    queue_exists = UserSurveyQueue.objects.filter(user=u)
    if not queue_exists:
        queue = None
    else:
        queue = queue_exists.get(user=u)

    if request.method == "POST":
        form = UserSurveyQueueForm(request.POST, instance=queue, user=u.id)
        if form.is_valid():
            form.instance.user = u
            form.save()
            return HttpResponseRedirect(reverse('home'))
    else:
        form = UserSurveyQueueForm(instance=queue, user=u.id)

    return render(request, 'surveys/set_user_queue.html', {'form': form})

models.py

class UserSurveyQueue(models.Model):
    user = models.OneToOneField(
        User,
        on_delete=models.CASCADE
    )
    queue = models.ManyToManyField(
        User,
        related_name='survey_queue',
    )

    class Meta:
        verbose_name = ('Survey Queue')
        verbose_name_plural = ('Survey Queues')

    def current_queue(self):
        return ", ".join([str(q.username) for q in self.queue.all()])

    def __str__(self):
        return self.user.username

1 ответ

Вы пытались использовать exclude(pk = instance.user) в наборе запросов all()?

Другие вопросы по тегам