2016-07-11 25 views
0

Ich habe erst vor kurzem mit klassenbasierten Ansichten begonnen und bin immer noch ahnungslos, was der richtige Weg ist, den richtigen Dropdown-Wert vorzuwählen.Django UpdateView: Setzen Sie die Dropdown-Menüs auf den ausgewählten Wert

Ich habe eine einfache UpdateView wie folgt aus:

class SomeUpdate(PermissionRequiredMixin, UpdateView): 
    model = SomeModel 
    form_class = SomeCreateForm 
    permission_required = 'app.some_model' 
    template_name_suffix = '_update_form' 
    raise_exception = True 

    def form_valid(self, form): 
     from_page = self.request.GET.get('from') 
     if from_page: 
      self.success_url = self.request.GET.get('from') 
     else: 
      self.success_url = "/somewhere/" 
     return super(SomeUpdate, self).form_valid(form) 

Während dies funktioniert und es füllt auch CharFields usw., Dropdown-Listen bleiben nicht ausgewählten, es ist wirklich unbequem zu bedienen. Was ich möchte, ist, dass das aktuell ausgewählte Feld des Objekts bereits ausgewählt ist, wenn Sie es bearbeiten (UpdateView).

Die verwendete form ist nur ein Standard ModelForm mit Feldern definiert. Das Feld selbst ist ein Foreignkey.

Ich habe versucht, get_initial(self) usw. zu verwenden, um den Dropdown-Wert festzulegen, aber mit keinem Erfolg.

+0

Der rechte Dropdown-Wert für das angegebene Modell sollte bereits ausgefüllt werden, wenn Sie mit einer Instanz eines Modells arbeiten (was UpdateView tut). Hat die Instanz, die Sie anzeigen, einen gültigen Wert für den angegebenen Fremdschlüssel? – Sayse

+0

Ja, sollte es richtig sein. Ich habe es noch einmal überprüft und kann über diesen auf den ausgewählten Fremdschlüssel zugreifen. Weder UpdateView noch über das Admin-Panel führt zu Fehlern. Aber beide halten es nicht ausgewählt. ManyToMany-Felder zeigen dagegen die Relationen richtig an. –

Antwort

0

Ich fand eine Arbeits Lösung für mein Problem:

Innerhalb der Klasse:

def get_initial(self): 
    initial = super(MyObjectUpdate, self).get_initial() 
    try: 
     field1 = self.get_object().field1 
     field2 = self.get_object().field2 
    except: 
     pass 
    else: 
     initial['field1'] = field1.pk 
     initial['field2'] = field2.pk 
    return initial 

Das ist mein Problem behoben und die UpdateView erstreckt Klasse gibt jetzt meine aufbereiteter Form mit den richtigen Werten in ausgewählt werden seine Dropdowns. Ich bin mir nicht sicher, ob es der richtige/beste Weg ist, es zu tun.