如何借助一对多关系在 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 中过滤Courses,然后在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的其他表中获取数据(Django的新手)

转: django数据库操作-增删改查-多对多关系以及一对多(外键)关系

在组合键上使用“链接”外键的问题

如何在课堂上设置两个外键? DJANGO ORM