Frage

ich Probleme habe zuvor ausgewählte Elemente in einer Modelform im Admin zu übertragen. Ich möchte, dass die forms.CheckboxSelectMultiple Widget verwenden, da dies die einfachste Benutzeroberfläche in diesem usecase ist. Es funktioniert so weit, dass beim Speichern werden die Werte gespeichert. Aber wenn die zuvor gespeicherte Artikel bearbeiten, zuvor die Werte in diesem Bereich gespeichert werden im Widget nicht reflektiert wird.

UI Beispiel:

alt text

Nach dem Eintrag (Bearbeitung dieses Elements, kehrt es leer):

alt text

Wenn jedoch nicht das Widget aber eine regelmäßige CharField zu verwenden, wenn das Element der Bearbeitung wie folgt aussieht:

alt text

So aus irgendeinem Grunde die Werte werden nicht durch die Checkbox-Widget dargestellt?

Hier ist meine vereinfachte Einrichtung, 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

Also, wenn Bearbeiten eines zuvor gespeicherten Artikel mit sagen 'Blog' ausgewählt haben, Debugging auf init zeigt mir die richtigen Werte auf self.fields [ 'entriesFrom'] ([u'blog‘]) , aber es ist nicht in den Kontrollkästchen spiegelt sich in der admin (nichts ist als ausgewählt gezeigt).

Bearbeiten

aktualisiert die ModuleForm Klasse auf Anfangswerte passieren, aber nichts bekommt immer noch bevölkerten vorbestellt, während es einige Werte in den Anfangswert sind ( „[u'blog ']“).

War es hilfreich?

Lösung

Lösung:

Einstellen der Auswahl durch eine ganze Zahl ist, anstelle einer Zeichenfolge.

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

Verdammt, die nicht wert war meinen Schädel über zu brechen.

Andere Tipps

Vielleicht bin ich Ihre Frage nicht ganz verstehen, aber es scheint, wie Sie ein wenig vereinfachen könnte. Mit ModelForms, ich glaube nicht, alle Ihre zwingenden die _ init _ in der Form notwendig ist. Versuchen Sie dies und sehen Sie, wenn Sie Ihr gewünschtes Verhalten bekommen.

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)

Wenn meine Antwort ist nicht das, was Sie suchen, versuchen, Ihre Frage zu klären, und ich werde sehen, ob ich Ihnen helfen kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top