当我在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)
答案 0 :(得分:0)
save_model
方法希望您保存传入的obj
。您不应该创建其他对象。
访问obj.id
时收到错误,因为您尚未保存obj
。