CheckboxSelectMultiple не предварительно проверяет флажки с начальным значением, установленным в queryset - PullRequest
0 голосов
/ 10 января 2019

Я работаю над почтовой программой для детей, которая установит флажки для соответствующих получателей почты после нажатия кнопки «Ответить всем». Когда я создаю шаблон для ответного электронного письма, мне нужно динамически генерировать варианты, а также предварительно отмеченные флажки. Все работает за исключением того, что ящики не проверяются. Здесь я прочитал много связанных вопросов, но ни один из них не был задан непосредственно из набора запросов. Я не понимаю, как / где установить «начальный». Чтобы быть уверенным, что мой фильтр не вызывает проблемы, я установил и набор запросов, и начальное значение в одно и то же значение, ожидая, что будут проверены все поля, но ни один из них не установлен. Спасибо за любую помощь.

forms.py:
class EmailForm(forms.Form):
    recipients = forms.ModelMultipleChoiceField(queryset=None, 
    widget=forms.CheckboxSelectMultiple)

email_views.py:
def email_compose_show(request, reply_type, email_id):
    if reply_type == 'reply-all':
        msg = Mail.objects.get(id=email_id)
    qs = CustomUser.objects.filter(id__in=get_users(request.user.id)).exclude(id=request.user.id)
    form = EmailForm(initial={'message': msg.message, 'subject': msg.subject})

    recipients = forms.ModelMultipleChoiceField(
        label="Recipients",
        widget=forms.widgets.CheckboxSelectMultiple,
        queryset=qs,
        initial=qs
    )
    form.fields['recipients'] = recipients

template:
{% for x,y in form.fields.recipients.choices %}
    <label for="id_recipients_{{forloop.counter0}}">
    <input type="checkbox" name="recipients" 
    id="id_recipients_{{forloop.counter0}}" value="{{ x }}"> {{ y }} 
</label>
{% endfor %}

1 Ответ

0 голосов
/ 10 января 2019

Нет, потому что вы специально избегаете использования помощников, которые Django дает вам для заполнения поля. В шаблоне буквально нет ничего, что указывало бы браузеру показывать какие-либо из отмеченных флажков.

Вместо того, чтобы повторять выбор получателей вручную, вы должны позволить Django сделать это; замените весь этот код шаблона просто

{{ form.recipients }}

Обратите внимание, вам не следует изменять само поле в представлении; лучше всего передать инициал в качестве параметра для создания формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...