Отключенная опция в Django Select Widget с использованием ModelChoiceField

Я пытаюсь показать неактивных пользователей как отключенных в виджете «Выбрать» моей формы.

У меня есть работник, который является пользовательской моделью django.

модели.py

class Task(models.Model):
    worker = models.ForeignKey(settings.AUTH_USER_MODEL, models.DO_NOTHING, blank=True, null=True,related_name='worker')

Он представлен ModelForm с использованием подкласса для отображения полного имени пользователя.

формы.py

class UserModelChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
         return obj.get_full_name()

class TaskForm(forms.ModelForm):
    worker = UserModelChoiceField(queryset=User.objects.filter(is_active=1).order_by('first_name'),widget=forms.Select(attrs={'class':'form-control'}),required=False)
    class Meta:
        model = Task
        fields = ['worker']

В настоящее время фильтр is_active=1 означает, что неактивные пользователи просто не отображаются в списке, а там, где они уже были выбраны, они отображаются как ---.

В идеале они появляются, но выделены серым цветом, поэтому они представлены, но не могут быть выбраны.

Из обзора https://djangosnippets.org/snippets/2453/

Который я нашел в Отключенная опция для selectionField - Django

Я смог сделать вывод, что подкласс select должен работать. Однако я не могу сказать, как добраться между набором запросов и виджетом, чтобы добиться ожидаемого результата. Чтение предполагает, что метод рендеринга в виджете может быть таким, но я не смог найти примеры того, как передавать информацию или где именно вызывается create_option.


person Ewanw    schedule 13.03.2019    source источник
comment
Я написал здесь полное решение этой проблемы: джанго">stackoverflow.com/questions/673199/   -  person Rob    schedule 26.03.2019