Django: ModelMultipleChoiceField не выбирает начальный выбор

Сегодня у меня была такая же ошибка (отсутствует точно такой же пакет). Я также создал проект MVC + Web API.

Это произошло потому, что я переместил файлы приложений (включая файл .csproj) в другое место. Я вручную обновил файл .sln, но теперь все зависимости пакетов (Visual Studio 2015) хранятся в файле .csproj.

Редактирование файла .csproj и исправление относительного пути к папке решения (которая содержит папку пакетов) решила проблему для меня.

25
задан dmi 29 January 2009 в 15:12
поделиться

3 ответа

Необходимо будет добавить __init__ метод к Action_Form для устанавливания начальных значений, не забывая звонить __init__ на основе ModelForm класс через [1 113] супер .

class Action_Form(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(Action_Form, self).__init__(*args, **kwargs)
        self.fields['from_company'].queryset = Contact.object.filter(...

, Если Вы планируете передать свои параметрические усилители фильтра как ключевое слово args к Action_Form, необходимо будет удалить их предшествующий вызов супер:

myfilter = kwargs['myfilter']
del kwargs['myfilter']

или, вероятно, лучше:

myfilter = kwargs.pop('myfilter')

Для получения дополнительной информации, вот другая ссылка, относящаяся к Динамический ModelForms в Django.

14
ответ дан Jeff Bauer 15 October 2019 в 15:41
поделиться

Если предыдущий ответ не был достаточно простым, я попытаюсь ответить 1) еще раз:

  1. Как я могу заставить ModelMultipleChoiceField принимать эти «начальные» значения?

Вы можете оставить Action_Form, как это было в исходном вопросе, и просто использовать это, чтобы сделать именно то, что вы хотите:

>>> form4 = Action_Form(initial={'from_company': Contact.objects.all().values_list('id',flat=True)})
>>> print form4['from_company']
11
ответ дан Jeff Bauer 15 October 2019 в 15:41
поделиться

Отвечаю на 1)

1. Как я могу заставить ModelMultipleChoiceField принимать эти «начальные» значения?

Это можно сделать в вашем методе Action_Form __ init __ с использованием атрибута ModelMultipleChoiceField initial .

Как сказано в нем. в исходном коде Django ( db / models / fields / related.py ) в def formfield (self, ** kwargs) :

        # If initial is passed in, it's a list of related objects, but the
        # MultipleChoiceField takes a list of IDs.

Итак, вам нужно указать ему список идентификаторов:

class Action_Form(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(Action_Form, self).__init__(*args, **kwargs)
        self.fields['from_company'].initial = [c.pk for c in Contact.object.filter()]
22
ответ дан 28 November 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: