Раскрывающееся меню "Simple Dynami c" в форме django - PullRequest
0 голосов
/ 10 февраля 2020

Во-первых, я новичок в django ... Я пытаюсь добавить выпадающее меню доступных отдельных пользователей (по имени и из моей базы данных "динамически") в форме.

Я использую django 2.2.6.

# MyCustomForm
class DetailedReportForm(forms.Form):
    AVAILABLE_USERS = MyUserModel.objects.order_by().values_list('name').distinct()
    selected_date = forms.DateTimeField(input_formats=['%d/%m/%Y'], required=True, widget=DateInput())
    selected_user = forms.CharField(label="Select a user", widget=forms.Select(choices=AVAILABLE_USERS))

# MyModel
class MyUserModel(models.Model):
    id = models.AutoField(db_column='Id', primary_key=True)
    name = models.CharField(db_column='Name', unique=True, max_length=90)
    ...
    def __str__(self):
        return str(self.name)

Проблема, с которой я сталкиваюсь, заключается в том, что мой набор запросов не работает (не знаю почему), поскольку он дает мне следующее: not enough values to unpack (expected 2, got 1)

Я пытался гуглить, но мне все еще не совсем ясно, что означает это сообщение об ошибке.

Может кто-нибудь объяснить, что означает эта ошибка django, чтобы я мог исправить ее и включить раскрывающийся список в мою форму?

1 Ответ

3 голосов
/ 10 февраля 2020

Проблема в choices аргументе, ожидающем список кортежей вроде этого: [(1, "one"), (2, "two")]. Первый элемент в фактическом значении кортежа для хранения в БД, второй - человекочитаемое представление.

Но на самом деле в вашем случае вы можете просто использовать ModelChoiceField вместо:

class DetailedReportForm(forms.Form):
    AVAILABLE_USERS = MyUserModel.objects.order_by().values_list('name').distinct()
    selected_date = forms.DateTimeField(input_formats=['%d/%m/%Y'], required=True, widget=DateInput())
    selected_user = forms.ModelChoiceField(label="Select a user", queryset=MyUserModel.objects.order_by().distinct("name"))

В противном случае список доступных параметров не будет обновляться динамически, поскольку код внутри класса формы работает только один раз при запуске django.

...