Django models 从Django中的子对象获取父对象

Django models 从Django中的子对象获取父对象,django-models,Django Models,我的models.py中有两个模型: class Case(model.Models): name = models.CharField(max_length=50) class Work(model.Models): name = models.CharField(max_length=50) case = models.ForeignKey('Case', on_delete=models.CASCADE) 在my views.py中,我有更新作品的功能,但我还需

我的models.py中有两个模型:

class Case(model.Models):
    name = models.CharField(max_length=50)

class Work(model.Models):
    name = models.CharField(max_length=50)
    case = models.ForeignKey('Case', on_delete=models.CASCADE)
在my views.py中,我有更新作品的功能,但我还需要访问其案例,以返回案例模板和帖子:

def updateWork(request, pk):
work = Work(id=pk)
work_form = WorkForm(instance=work)
case = Work.objects.filter(...)

if request.method == 'POST':
    work_form = WorkForm(request.POST, instance=work)
    if work_form.is_valid():
        work_form.save()
        return redirect('update_case', pk='here should be the case id')

context = {'work_form': work_form, 'work': work}
return render(request, 'case/update_work.html', context)

如何定义特定工作的父案例id以将其指向行:return redirect('update_case',pk='此处应为案例id')?

您可以通过
.case
属性访问此属性,或者您可以使用
.case\u id
获取
外键所指列的值,需要时将加载以下内容:

def updateWork(request, pk):
    work = Work(id=pk)
    work_form = WorkForm(instance=work)
    case = Work.objects.filter(...)
    
    if request.method == 'POST':
        work_form = WorkForm(request.POST, instance=work)
        if work_form.is_valid():
            work_form.save()
            return redirect('update_case', pk=work.case_id)
    context = {'work_form': work_form, 'work': work, 'case': case}
    return render(request, 'case/update_work.html', context)
def更新工作(请求,主键):
工时=工时(id=pk)
工作形式=工作形式(实例=工作)
case=Work.objects.filter(…)
如果request.method==“POST”:
工作形式=工作形式(request.POST,实例=工作)
如果工作表单有效():
工作表保存()
返回重定向('update\u case',pk=work.case\u id)
上下文={'work\u form':work\u form,'work':work,'case':case}

return render(请求'case/update_work.html',context)
我尝试了它,但得到了一个错误:“case.models.work.case.relatedObjectsDoetExist:工作没有案例。”@Oleh:这是
外键吗?乍一看,您有一个
Case
对象,它有一个
OneToOneFIeld
to
Work
。假设它是一个
外键
,它是否可以为null(使用
null=True
)?我认为它是“一对多关系”:一个案例可以有许多作品,但作品只有一个案例。我没有在我的模型中定义null=True。@Oleh:如果从
Work
Case
,这是一个多对一的关系。一个
外键
,意味着许多
工作
s可以引用相同的
案例
。但根据您的评论,您所做的建模似乎与此处显示的案例稍有不同。@Oleh:如果您有一个
Work
对象,您可以使用
mywork.case\u id=1425
,使用
1425
案例的id,当然,假设
case=…
a
ForeignKey
Work
模型中定义。