【问题标题】:Return Primary Key after saving to a model in Django保存到 Django 中的模型后返回主键
【发布时间】:2014-05-23 11:43:04
【问题描述】:

我已经看过文档here 和几个类似的堆栈溢出帖子,但是在保存我的表单后,我仍然无法返回该新模型的 ID/PK。它一直告诉我'ProposalForm' object has no attribute 'id' 如何在保存后立即返回 ID?

这是视图:

def proposal_create_view2(request):
        if request.method == 'POST':
            form = ProposalForm(data=request.POST)
            if form.is_valid():
                form.save()
                response = {}
                response['proposalID'] = form.id
                return response

【问题讨论】:

    标签: python django return


    【解决方案1】:

    ModelForm.save() 的返回值是新模型。取而代之的是 PK。

    【讨论】:

    • 我是 Django 的新手,所以我不完全理解。你能详细说明一下吗?具体来说,我将如何从新模型中获取它?
    • 与您当前尝试从表单中获取它的方式相同。方法返回的模型除外。
    【解决方案2】:

    my_saved_model = my_model_form.save()

    打印 my_saved_model.pk

    编辑:

    def proposal_create_view2(request):
        if request.method == 'POST':
            form = ProposalForm(data=request.POST)
            if form.is_valid():
                mysaved_model = form.save()
                response = {}
                response['proposalID'] = mysaved_model.id #or .pk
                return render(request , 'my_template_file.html' , response) 
    
                #return response statement is NOT valid as you need to return an HttpResponse not a dict
    

    评论Django Docs on HttpResponses

    【讨论】:

    • 我知道我在这里只是个白痴。但我想我不知道 my_saved_model 的代码是什么。我正在尝试使用response['proposalID'] = Proposal.objects.get(user=request.user, create_date=datetime.datetime.now()) return response 检索新的提案对象,但这也不起作用。我将在示例中使用的实际代码是什么?
    • @MichaelRomrell 我更新了答案,希望现在更清楚了。
    • 非常感谢!我只是在学习 Django,所以我很感谢你的耐心。我最终将您的返回语句进一步修改为return HttpResponse(mysaved_model.id),因为我不想再次加载模板。你太棒了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 2021-05-04
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2021-12-04
    相关资源
    最近更新 更多