听完还是不太懂
老师您好,能麻烦再讲一下为什么一定需要使用外链以及related_name到底有什么用处么?
听完头更晕了(捂脸)

这两种方法都能得到每位学生的总分,但第一种明显更方便也更容易理解呀,为什么还需要采用第二种方法呢
正在回答 回答被采纳积分+1
个人觉得最大的区别是:第一种方法适用单表查询,第二种方法适用多表查询,即有外键关联的查询
这样子理解不知道对不对:
related_name:添加于创建外键关联的字段
被关联表可以通过related_name关键字调用关联表下的字段
class Student(models.Model):
'''学生表'''
name = models.CharField("学生姓名", max_length=24)
class Meta:
db_table = "student"
class Scour(models.Model):
stu_name = models.ForeignKey(Student, on_delete=models.CASCADE, related_name="stu_name")
scour = models.FloatField("分数")
class Meta:
db_table = "stu_scour"
def sum(request):
"""查询每个学生的成绩总和"""
eve_total = student.objects.all().annotate(Sum(stu_name__scour))
for item in eve_total:
print(item.name, item.stu_name__scour__sum)
return HttpResponse("ok")有个问题不明白:related_name是只适用于聚合函数查询吗?
同学你好:
1、related_name:Django中默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息。这个属性的名称默认是以子表的名称小写加上_set()来表示(例:表名为student,则此时为student_set),若设置了related_name,则可以使用related_name的值来代替表名
例:
class Person(models.Model): name = models.CharField(verbose_name='作者姓名', unique=True, max_length=10) age = models.IntegerField(verbose_name='作者年龄') class Book(models.Model): person = models.ForeignKey(Person, on_delete=models.CASCADE) title = models.CharField(verbose_name='书籍名称', max_length=10) pubtime = models.DateField(verbose_name='出版时间')
查询person关联的所有书籍对象:book = person.book_set.all()
若定义了related_name为person_books,则可以使用person.person_books.all()
2、如果只针对实现这个效果两种方式都可以,具体需要根据实际场景选择更适合的方式。这里老师只是为了给同学演示一下两种方法的效果
如果我的回答解决了同学的疑惑,欢迎采纳!祝同学学习愉快
- 参与学习 人
- 提交作业 218 份
- 解答问题 3562 个
本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星