2016-04-08 8 views
0

Ich verwende Django 1.7.11. Ich habe Modelle:Django, Add Wert zu ManyToManyField, wenn Änderungen des Modells speichern

Ich brauche Feld "all_categories" enthält "Kategorie" und alle seine übergeordneten Kategorien. Ich habe versucht, post_save zu verwenden, aber es ändert keinen Wert. Das Titelfeld wird nicht geändert. Es funktioniert nicht, wenn ich Model Through Admin-Schnittstelle erstellt und mit benutzerdefiniertem Formular arbeitet.

m2m_changed hilft auch nicht, weil ManyToManyField leer ist und keine Änderungen hat. Wie kann ich einen Wert von ForeignKey zu ManyToMany Feld hinzufügen? Was soll ich tun, damit es in Admin-Oberfläche funktioniert.

+0

Wurde Ihr 'post_save' überhaupt aufgerufen? –

+0

Ja, jetzt merke ich, es funktioniert gut mit benutzerdefinierten Formular und funktioniert nicht mit Admin-Schnittstelle. Was kann ich mit Admin-Formular tun?) – Swallow

Antwort

0

Ich habe die Lösung gefunden. In Admin-Klasse muss eine Funktion save_model wie folgt hinzufügen:

class AdvertismentAdmin(admin.ModelAdmin): 
    def save_model(self, request, obj, form, change):     
     if obj.category: 
     category_list=[] 
     category = obj.category 
     category_list.append(category) 
     for parent in category.get_ancestors(): 
      if parent not in category_list: 
       category_list.append(parent) 
     form.cleaned_data['all_categories'] = category_list    
     super(AdvertismentAdmin, self).save_model(request, obj, form, change) 
Verwandte Themen