Django: MultipleChoiceField в admin для переноса ранее сохраненных значений - PullRequest
2 голосов
/ 04 октября 2010

У меня проблемы с переносом ранее выбранных элементов в ModelForm в админке.Я хочу использовать виджет forms.CheckboxSelectMultiple , так как это самый простой пользовательский интерфейс в этом сценарии использования.Это работает так далеко, что при сохранении значения сохраняются.Но при редактировании ранее сохраненного элемента значения, ранее сохраненные в этом поле, не отображаются в виджете.

Пример пользовательского интерфейса:

alt text

После публикации (редактированиеэтот элемент, возвращает его пустым):

alt text

Однако, когда не используется виджет, а обычный CharField, при редактировании элемента он выглядит следующим образом:

alt text

Так почему-то значения не представлены виджетом флажка?

Вот моя упрощенная настройка, models.py

POST_TYPES = (
    ('blog',      'Blog'),
    ('portfolio',     'Portfolio'),
    ('beeldbank',     'Beeldbank'),
)

class Module(models.Model):
    title         =   models.CharField(max_length=100, verbose_name='title')        
    entriesFrom     =   models.CharField(max_length=100)

    def __unicode__(self):
       return self.title

forms.py:

class ModuleForm(forms.ModelForm):
    entriesFrom = forms.MultipleChoiceField(
            choices=POST_TYPES, 
            widget=CheckboxSelectMultiple, 
            label="Pull content from", 
            required=False,
            show_hidden_initial=True) 

    class Meta:
        model = Module

    def __init__(self, *args, **kwargs):
        super(ModuleForm, self).__init__(*args, **kwargs)

        if kwargs.has_key('instance'):
            instance = kwargs['instance']
            self.fields['entriesFrom'].initial = instance.entriesFrom

            logging.debug(instance.entriesFrom)

admin.py

class ModuleAdmin(admin.ModelAdmin):
    form = ModuleForm

Таким образом, при редактировании ранее сохраненного элемента с выбранным «блогом» отладка на init возвращает мне правильные значения для self.поля ['recordsFrom'] ([u'blog ',]), но они не отражены в флажках (ничего не отображается в качестве выбранного) в администраторе.

edit

обновлен класс ModuleForm для передачи начальных значений, но ничего не заполняется заранее, пока есть несколько значенийв исходном значении ("[u'blog ']").

Ответы [ 2 ]

3 голосов
/ 05 октября 2010

Решение:

Установка выбора целым числом вместо строки.

POST_TYPES = (
    (1,     'Blog'),
    (2,     'Portfolio'),
    (3,     'Beeldbank'),
)

Черт, не стоило ломать мне череп.

0 голосов
/ 05 октября 2010

Может быть, я не совсем понимаю ваш вопрос, но кажется, что вы могли бы немного упростить.Используя ModelForms, я не думаю, что вы должны переопределять _ init _ в вашей форме.Попробуйте и посмотрите, получите ли вы желаемое поведение.

models.py

class Module(models.Model):
    POST_TYPES = (
        ('blog', 'Blog'),
        ('portfolio', 'Portfolio'),
    )

    title        =   models.CharField(max_length=100, verbose_name='title')        
    entriesFrom  =   models.CharField(max_length=100, verbose_name='Pull content from', choices=POST_TYPES, blank=True)

    def __unicode__(self):
       return self.title

forms.py

class ModuleForm(forms.ModelForm):
    class Meta:
        model = Module

admin.py

from django.contrib import admin
admin.site.register(models.Module)

Если мой ответ не тот, который вы ищете, попробуйте уточнить ваш вопрос, и я посмотрю, смогу ли я вам помочь.

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