2017-05-03 6 views
0

Ich möchte change_formNation Modell-ID Django Admin passieren, so kann ich eine Taste oder zwei zeigen bei der Bearbeitung. Ich habe versucht, die ID an die Funktion render_change_form übergeben und in der Vorlage beenden, aber ich bekomme den folgenden Fehler.ID Attribut Fehler Django Admin in Form ändern

'NationAdmin' object has no attribute 'nation_id' 

N: B Dies funktioniert gut bei der Bearbeitung, aber es wird diesen Fehler werfen, wenn ich ein neues Modell Objekt über Django Admin-Dashboard hinzufügen möchten.

Methoden unter NationAdmin

#this method is to get the id 
    def change_view(self, request, nation_id=None, form_url='', extra_context=None): 
     self.nation_id = nation_id 
     return self.changeform_view(request, nation_id, form_url, extra_context) 

#for form 
def render_change_form(self, request, context, *args, **kwargs): 
     if self.nation_id: #django is telling me this line is causing error 
      nation= self.get_object(request, self.nation_id) 
      context.update({'nation':nation}) 
     return super(NationAdmin, self).render_change_form(request, context, *args, **kwargs) 

Change_form.html

{% if not nation.is_moderated and not nation.is_rejected %} 
     <a href="{% url 'activate_moderation' nation.id %}"> <input type="button" value="{% trans 'Approve' %}" name="_approvebutton" /></a> 
    {% endif %} 

Antwort

0

Sie können mit original tun. Keine Notwendigkeit der Einstellung nation_id

def render_change_form(self, request, context, *args, **kwargs): 
     if context.get('original'): # 
      obj = context['original'] 
      #this will be the object you are trying to update 
     return super(NationAdmin, self).render_change_form(request, context, *args, **kwargs) 
+0

okay .. wo kommt das "Original" rein? Ein Schlüsselwort im Model Admin? – YoYo

+0

Es ist das Schlüsselwort, das in admin verwendet wird, das das Objekt sein wird, das Sie ändern. Wenn ein neues Objekt hinzugefügt wird, ist es None. Deshalb lege ich wenn Bedingung – itzMEonTV

+0

Okay lassen Sie mich es versuchen. Vielen Dank! – YoYo