Django models 从Django中的子对象获取父对象
我的models.py中有两个模型: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中,我有更新作品的功能,但我还需
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
toWork
。假设它是一个外键
,它是否可以为null(使用null=True
)?我认为它是“一对多关系”:一个案例可以有许多作品,但作品只有一个案例。我没有在我的模型中定义null=True。@Oleh:如果从Work
到Case
,这是一个多对一的关系。一个外键
,意味着许多工作
s可以引用相同的案例
。但根据您的评论,您所做的建模似乎与此处显示的案例稍有不同。@Oleh:如果您有一个Work
对象,您可以使用mywork.case\u id=1425
,使用1425
案例的id,当然,假设case=…
aForeignKey
在Work
模型中定义。