2016-01-22 45 views
0

當我嘗試Daniel Roseman和Tim Diggins在Redirect on admin Save的上述建議時,如果我放入一個URL並指定了obj.id,它可以工作,但是當我使用obj時。它會給出一個Django無法找到「無」的錯誤。爲了解決這個問題,我必須在我的模型中找到id的最大值並使用它(如下所示)。Django Admin - def response_add找不到obj.id

def response_add(self, request, obj, post_url_continue=None): 
    arunidlist = arun.objects.values_list('id', flat=True) 
    newpk = max(arunidlist) 
    return HttpResponseRedirect("/admin/nbig/arun/%s" % str(newpk)) 
    # this did not work: return HttpResponseRedirect("../%s" % obj.id)   
    # this worked: return HttpResponseRedirect("/admin/nbig/arun/99") 

(注意nbig是我的模型和阿倫是我的應用程序)

我看到我引用的字符串是一對夫婦歲,但如果有人能告訴我如何避免hackiness,我會很感激。謝謝。

被修改的問題:

訂正功能:

def response_add(self, request, obj, post_url_continue=None): 
    return HttpResponseRedirect("../%s" % obj.id) 

模型(Django的創建的ID的主鍵):

class arun(models.Model): 
    auser = models.CharField(max_length=15, null=True) 
    more fields here 
    alastcompid = models.FloatField(null=True) 
    class Meta: 
     verbose_name = 'NBI Graph' 
     verbose_name_plural = 'NBI Graph' 
    def __str__(self): 
     return str(self.id) 

錯誤: 找不到網頁(404) 請求方法:GET 請求地址:http://127.0.0.1:8000/admin/nbig/arun/None/ 引發自:django.contrib.admin .options.change_view 主鍵爲'None'的NBI Graph對象不存在。 你看到這個錯誤,因爲你的Django設置文件中有DEBUG = True。將其改爲False,Django將顯示一個標準的404頁面。

我保存爲新的代碼相關部分(這可能會造成問題?):

def save_model(self, request, obj, form, change): 
     f_id = request.POST.get('id','') 
     f_adate = datetime.now().date()  
     f_atime = datetime.now().time() 

     if '_saveasnew' in request.POST: 
      aa = arun(id=f_id, adate = f_adate, atime = f_atime) 
      aa.save(force_insert=True) 
+1

您是否在模型上手動指定了主鍵?你可以展示你的模型,以及當你使用'obj.id'時的完整回溯。 – Alasdair

+0

Alasdair, 感謝您提供任何幫助。我不手動設置ID字段。 訂正功能: DEF response_add(個體,請求,OBJ,post_url_continue =無): 返回HttpResponseRedirect( 「../%的」 %obj.id) 型號: 類阿倫(models.Model): auser = models.CharField(MAX_LENGTH = 15,空=真)在這裏 多個字段 alastcompid = models.FloatField(空=真) 類元: verbose_name = 'NBI圖' verbose_name_plural = 'NBI圖' 高清__str __(self): return str(self.id) – Sandra

+0

以下是錯誤消息:Page not found(404) 請求方法:\t GET 請求URL:\t http://127.0.0.1:8000/admin/nbig/arun/None/ 提出者:\t django.contrib.admin.options.change_view與主鍵 NBI Graph對象'沒有'不存在。 – Sandra

回答

0

save_model方法需要您保存傳入的obj你不應該創建一個不同的對象。代替。

訪問obj.id時出現錯誤,因爲您尚未保存obj

+0

Alasdair,所以當我強制保存時,我基本上覆蓋了Django的保存處理並斷開與obj.id的連接?這就說得通了。我強制保存,因爲我試圖控制表單域(我也有幾個表單部件),我無法弄清楚如何讓管理員在默認情況下進行保存。謝謝你的幫助。 – Sandra

+0

問題不是你調用'save(force_insert = True)',問題是你保存了一個新的對象'aa'而不是'obj'對象。如果您願意,您可以在保存之前更改'obj'的值,例如'obj.f_adate = new_value'。 – Alasdair

+0

哦......好吧。感謝您再次解釋。我第一次完全誤解了。我會嘗試。 – Sandra