Select2 и django_filters не запрашивают внешние ключи - PullRequest
0 голосов
/ 14 сентября 2018

Я использую django_filters для расширенного поиска и select2Widget для отображения параметров поля внешнего ключа.

Загружаются правильные значения, но всякий раз, когда я отправляю форму, я получаю сообщение об ошибке: Selectправильный выбор.Этот выбор не является одним из доступных вариантов.

Ошибка может показаться довольно очевидной, но я не могу найти, как ее решить.Какие-либо предложения?

filters.py

class MyFilter(django_filters.FilterSet):
    b = django_filters.ModelChoiceFilter(
        queryset=ModelA.objects.values_list('b__name', flat=True)
        widget=Select2Widget()
    )

class Meta:
    model = ModelA
    fields = ('b',)

models.py

class ModelA(models.Model):
    b = models.ForeignKey('ModelB', on_delete=models.CASCADE)

class ModelB(models.Model):
    name = models.CharField(max_length=100, unique=True)

    def __str__(self):
        return self.name

1 Ответ

0 голосов
/ 14 сентября 2018

AS user @dirkgroten указал в комментарии к вопросу, следующая строка выглядит странно:

queryset=ModelA.objects.values_list('b__name', flat=True)

Таким образом, виджет не может узнать pk каждого элемента списка (так как он возвращает только имена). Это может привести к тому, что представление не может сохранить выбранный экземпляр ModelB, поскольку оно не знает выбранного pk.

Ах, вы также можете использовать ModelB вместо ModelA

Попробуйте изменить его на что-то вроде этого

queryset=ModelB.objects.values('pk', 'b__name')

или даже это

queryset=ModelB.objects.all()

и дайте нам знать, если это работает.

...