Django Admin - def response_add找不到obj.id

时间:2016-01-22 14:54:37

标签: python django

当我在Redirect on admin Save尝试Daniel Roseman和Tim Diggins的上述建议时,如果我输入一个URL并指定了obj.id,它就可以了,但是当我使用obj.id时会出错Django找不到“无”。为了解决这个问题,我必须在我的模型中找到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是我的模特,而arun是我的应用程序)

我看到我引用的字符串已经有几年了,但如果有人能告诉我如何避免黑客,我会很感激。感谢。

编辑问题:

修订功能:

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

Model(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 具有主键“无”的NBI图形对象不存在。 你看到这个错误,因为你的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 个答案:

答案 0 :(得分:0)

save_model方法希望您保存传入的obj。您不应该创建其他对象。

访问obj.id时收到错误,因为您尚未保存obj