如何借助一对多关系在 Django 中使用外键从课程中获取主题
Posted
技术标签:
【中文标题】如何借助一对多关系在 Django 中使用外键从课程中获取主题【英文标题】:how to get subjects from course using foreign key in django with the help of one to many relationship 【发布时间】:2020-10-25 05:11:53 【问题描述】:我在网站上工作,每个课程都有不同的课程,每门课程都没有一些科目,基本上我使用的是一对多的关系,我在以所需的方式获得输出时遇到问题 (假设我有 2 个科目,即 cse 和机械工程,cse 有 2 个科目 html 和 css 类似地,机械工程有 2 个科目热力学和流体力学)我想要这样的输出 CSE html css
机械工程 热 流体力学 请建议我的代码有什么问题,这就是为什么我无法获得所需的输出`
def course(request):
courses = Course.objects.prefetch_related('subjects_set')
context = 'courses': courses
return render(request, 'test.html', context)
def subjects(request, course_id):
subjects = Subjects.objects.filter(course_id=course_id)
return render(request, 'test.html', 'subjects': subjects)
这是我的观点.py
% for course in courses %
course.title
% for subjects in course.subject_set.all %
subject.title
% endfor %
<br/>
% endfor %
这是我的 html 文件
class Course(models.Model):
image = models.ImageField(upload_to='course/', blank=True)
title = models.TextField(blank=True)
def __str__(self):
return self.title
class Subjects(models.Model):
course = models.ForeignKey(Course, on_delete=models.CASCADE)
image = models.ImageField(upload_to='subject/', blank=True)
title = models.CharField(max_length=255)
def __str__(self):
return self.title
这是我的模特
`
【问题讨论】:
【参考方案1】:您不能将subjects
传递给模板,因为它会迭代courses
。
您可以做的是在def subjects
中过滤Course
s,然后在test.html
中也进行渲染:
def subjects(request, course_id):
courses = Course.objects.prefetch_related('subjects_set').filter(pk=course_id)
return render(request, 'test.html', 'courses': courses)
【讨论】:
@Sumit8Kumar:您将两个视图渲染到同一个模板,因此模板需要一个courses
项目传递给模板。我们通过改变subjects
视图来传递一个带有one Course
对象的查询集。
你能告诉我一些关于我的html代码的事情吗?我认为它也有一些问题@willem-van-onsem以上是关于如何借助一对多关系在 Django 中使用外键从课程中获取主题的主要内容,如果未能解决你的问题,请参考以下文章
django数据库操作-增删改查-多对多关系以及一对多(外键)关系
如何使用外键从Django的其他表中获取数据(Django的新手)