2017-08-30 72 views
0

我有下面的代碼,我已經修改了管理員窗體以傳遞額外的信息,然後在保存過程完成後使用。 使用保存按鈕時可以正常工作。 下面的代碼的問題是,當有人使用「另存爲新」按鈕時,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) 

回答

1

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