Python Django Admin-def response_add找不到obj.id
当我在上尝试Daniel Roseman和Tim Diggins提出的上述建议时,如果我输入URL并指定obj.id,它会起作用,但当我使用obj.id时,它会给出一个Django找不到“None”的错误。为了解决这个问题,我必须在模型中找到id的最大值并使用它(如下所示) (请注意,nbig是我的模型,arun是我的应用程序) 我看到我引用的字符串有几年历史了,但是如果有人能告诉我如何避免这种黑客行为,我将不胜感激。谢谢 编辑问题: 修订后的职能:Python Django Admin-def response_add找不到obj.id,python,django,Python,Django,当我在上尝试Daniel Roseman和Tim Diggins提出的上述建议时,如果我输入URL并指定obj.id,它会起作用,但当我使用obj.id时,它会给出一个Django找不到“None”的错误。为了解决这个问题,我必须在模型中找到id的最大值并使用它(如下所示) (请注意,nbig是我的模型,arun是我的应用程序) 我看到我引用的字符串有几年历史了,但是如果有人能告诉我如何避免这种黑客行为,我将不胜感激。谢谢 编辑问题: 修订后的职能: def response_add(self,
def response_add(self, request, obj, post_url_continue=None):
return HttpResponseRedirect("../%s" % obj.id)
模型(Django创建了ID主键):
错误:
找不到页面(404)
请求方法:获取
请求URL:
引发者:django.contrib.admin.options.change\u视图
主键为“None”的NBI图形对象不存在。
您看到此错误是因为Django设置文件中的DEBUG=True。将其更改为False,Django将显示一个标准的404页面
我的“另存为新代码”的相关部分(这是否会导致问题?):
save\u model
方法要求您保存传入的obj
。您不应该创建其他对象
您在访问
obj.id
时出现错误,因为您尚未保存obj
您是否已在模型上手动指定主键?当您使用obj.id
.Alasdair时,能否显示您的模型以及完整的回溯,感谢您提供的帮助。我没有手动设置id字段。修改后的函数:def response\u add(self、request、obj、post\u url\u continue=None):return-HttpResponseRedirect(..%s”%obj.id)Model:class-arun(models.Model):auser=models.CharField(max\u length=15,null=True)此处还有更多字段alastcompid=models.FloatField(null=True)class Meta:verbose\u name='NBI Graph'verbose\u name\u复数='NBI Graph'def\uuuu str\uuuu(self):返回str(self.id)错误消息:找不到页面(404)请求方法:获取请求URL:引发者:django.contrib.admin.options.change\u view主键为“None”的NBI图形对象不存在。请回答您的问题,并在此处添加代码和错误消息--格式使其更易于阅读!感谢您为我指出编辑功能。我更新了我的问题。Alasdair,所以当我强制执行save时,我基本上覆盖了Django对save的处理,并中断了它与obj.id的连接?这是有道理的。我强制保存是因为我试图控制表单字段(我也有几个表单小部件),但我不知道如何让管理员在默认情况下进行保存。感谢您的帮助。问题不是您正在调用save(force_insert=True)
,而是您正在保存一个新对象aa
,而不是对象obj
。如果需要,可以在保存之前更改obj
的值,例如obj.f_adate=new_value
。哦……好的。谢谢你再次解释。我第一次完全误解了。我会试试的。在强制保存之后,我添加了这个:obj.id=f_id,现在它可以工作了。非常感谢您的解释!很高兴它能工作,但理想情况下应该调用obj.save()
,然后Django将为您设置id。设置obj.id=f_id
对我来说听起来很脆弱。
def response_add(self, request, obj, post_url_continue=None):
return HttpResponseRedirect("../%s" % obj.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)
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)