2017-08-30 1 views
0

J'ai le code ci-dessous où j'ai modifié le formulaire d'administration pour transmettre des informations supplémentaires qui sont ensuite utilisées après que le processus de sauvegarde est terminé. Cela fonctionne très bien lorsque vous utilisez le bouton de sauvegarde. Le problème avec le code ci-dessous est que lorsque quelqu'un utilise le bouton "enregistrer comme nouveau", sample_pk serait l'identifiant de l'échantillon courant et non le nouvel échantillon généré. Ma question est comment obtenir l'ID du nouvel objet après avoir appelé le super sur save_related.django admin comment obtenir l'ID de nouvel objet lors de la substitution save_related

@admin.register(Sample) 
class SampleAdmin(ModelAdmin): 
    save_as = True 
    def save_related(self, request, form, formsets, change): 
     super(SampleAdmin, self).save_related(request, form, formsets, change) 
     args = request.resolver_match.args 
     if len(args) < 1: # not previously saved 
      return 
     sample_pk = int(args[0]) 
     new_things = [] 
     for formset in formsets: 
      for key, val in formset.data.items(): 
       if key.startswith('robo_'): 
        new_things.append(val) 
     x = sum(new_things) 
     sam = Sample.objects.get(pk=sample_pk) 
     OtherTable.objects.create(x=x, sample=sam) 

Répondre

1

J'ai compris. Je devrais utiliser: form.instance.id

@admin.register(Sample) 
class SampleAdmin(ModelAdmin): 
    save_as = True 
    def save_related(self, request, form, formsets, change): 
     super(SampleAdmin, self).save_related(request, form, formsets, change) 
     args = request.resolver_match.args 
     if len(args) < 1: # not previously saved 
      return 
     sample_pk = form.instance.id 
     new_things = [] 
     for formset in formsets: 
      for key, val in formset.data.items(): 
       if key.startswith('robo_'): 
        new_things.append(val) 
     x = sum(new_things) 
     sam = Sample.objects.get(pk=sample_pk) 
     OtherTable.objects.create(x=x, sample=sam)