2016-10-31 2 views
0

Ich habe Modell, das unter anderen Feldern price Eigenschaft enthält, die dynamisch berechnet wird. Ich möchte diese Eigenschaft in der Modellverwaltungsseite anzeigen. Also habe ich erstellt benutzerdefinierte Modelform:Wie befüllen Sie das Django-Admin-Formular aus der Modelleigenschaft?

class ShipmentForm(forms.ModelForm): 
    price = forms.IntegerField() 

    class Meta: 
     model = models.Shipment 
     fields = [ 
      'title', 
      'price', 
     ] 

Allerdings kann ich nicht price Wert in dieser Form erhalten.

Hier ist, wie ich in Form Admin-Panel zu ändern:

class ShipmentAdmin(admin.ModelAdmin): 
    form = ShipmentForm 
+0

Es lohnt sich, den Titel dieser Frage zu aktualisieren, um anzuzeigen, dass es sich um den Django-Administrator handelt, nicht um öffentliche Formulare. – nimasmi

Antwort

1

Siehe ModelAdmin.readonly_fields (Django 1.10 docs Link).

Ein schreibgeschütztes Feld kann nicht nur Daten aus einem Modellfeld anzeigen, sondern auch die Ausgabe einer Modellmethode oder eine Methode der ModelAdmin-Klasse selbst anzeigen.

Dies bedeutet, dass Sie tun können:

class ShipmentAdmin(admin.ModelAdmin): 
    readonly_fields = ('price', 'something_else') 

    def something_else(self, instance): 
     # calculate something else here 

Wo price ein Modellverfahren ist, und something_else ist ein Modeladmin-Methode.

+0

Benötigt die Methode auch nicht; readonly_fields, wie list_display, können Modelleigenschaften direkt verwenden. –

+0

Danke, aktualisiert. – nimasmi

Verwandte Themen