Python Django Admin-def response_add找不到obj.id

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,

当我在上尝试Daniel Roseman和Tim Diggins提出的上述建议时,如果我输入URL并指定obj.id,它会起作用,但当我使用obj.id时,它会给出一个Django找不到“None”的错误。为了解决这个问题,我必须在模型中找到id的最大值并使用它(如下所示)

(请注意,nbig是我的模型,arun是我的应用程序)

我看到我引用的字符串有几年历史了,但是如果有人能告诉我如何避免这种黑客行为,我将不胜感激。谢谢

编辑问题:

修订后的职能:

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)