django ModelMultipleChoiceField (значения по умолчанию) - PullRequest
2 голосов
/ 25 октября 2010

Я искал и пытался заставить это работать в течение последних нескольких часов, и я не могу

У меня есть список навыков, которые я беру из базы данных:

forms.ModelMultipleChoiceField(
                              skills.objects.all(), 
                              required=True, 
                              widget=forms.CheckboxSelectMultiple(),
                              label='Check your skills.',
                              initial=skill_list.objects.filter(user='void'),
                              )

но это не работает, так как я ожидаю, что это сработает.Я в основном хочу отобразить список навыков (все они) и те, которые пользователь проверил, чтобы проверить ... pff Я даже не могу объяснить, правильно.

После того, как пользователь проверяет флажок и нажимает кнопку подтвержденияна другой странице я хочу отобразить все навыки, и тот, который пользователь проверил, должен быть проверен.

Допустим, у меня есть a b c, а пользователь проверяет b и нажимает на кнопку отправки, когда всо страницей, которую я хочу отобразить a не отмечен b отмечен c не отмечен.

PS: Если я использую skills.objects.all(), я получаю в HTML value 1и как я могу сделать это так:

skills = (
         ('a', 'a'),
         ('b', 'b'),
         )  

Вместо ('1', 'a'), ('2', 'b').

1 Ответ

2 голосов
/ 26 октября 2010

Ваш вопрос (ы) немного неясен, но я все еще стараюсь изо всех сил.

Во-первых,

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

Форма не имеет доступа к пользователю, поэтому вам необходимо передать ее пользователю. Вы можете сделать это, перегрузив метод __init__ следующим образом:

    def __init__(self, **kwargs):
        current_user = kwargs.pop ('user')
        super(FormName, self).__init__(attrs)

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

self.fields['skills'].initial = skill_list.objects.filter(user='void')

Помните, что вы должны сделать это после вызова конструктора базового класса.

Наконец,

PS: если я использую навыки. получить в HTML значение 1 и как можно Я делаю это как

навыки = ( («а», «а»), («б», «б»), )

вместо ('1', 'a'), ('2', 'b')

Почему вы хотите это сделать? Цифры являются первичными ключами строк таблицы «Навыки». Джанго использует это, чтобы установить соответствующие отношения.

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