django admin当覆盖save_related时如何获取新对象的ID

问题描述:

我有下面的代码,我已经修改了管理员窗体以传递额外的信息,然后在保存过程完成后使用。 使用保存按钮时可以正常工作。 下面的代码的问题是,当有人使用“另存为新”按钮时,sample_pk将是当前样本的ID而不是生成的新样本。 我的问题是如何在save_related上调用super之后获取新对象的id。django admin当覆盖save_related时如何获取新对象的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 = 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) 

我想通了。我应该使用: 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)