gpt4 book ai didi

orm - 了解 PeeWee 的 related_name 属性

转载 作者:行者123 更新时间:2023-12-05 01:22:27 26 4
gpt4 key购买 nike

我真的很喜欢 Peewee ORM。它轻巧,易于使用,并且有很好的文档记录。我难以理解的一件事是实现外键时使用的 related_name 属性。我永远不确定该属性是否应该与表或列相关。有人可以向我确切解释我应该使用这个名字的目的吗?如何使用?例如,Peeewee 文档中的学生/类(class)示例。

https://peewee.readthedocs.org/en/2.0.2/peewee/fields.html#implementing-many-to-many

class Student(Model):
name = CharField()

class Course(Model):
name = CharField()

class StudentCourse(Model):
student = ForeignKeyField(Student)
course = ForeignKeyField(Course)

假设我有 Student、Course、StudentCourse 模型。 StudentCourse 列的相关名称是什么?

最佳答案

I'm never sure whether the property should relate to the table, or to the column. Could someone explain to me exactly what I should be using the name for, and how?

外键就像一个指针,一对一。但也有一个隐含的反向引用——这是相关的名称。示例:

  • 推文有发推文的用户的外键。反向引用是用户创建的推文,因此 related_name='tweets'
  • 类别有一个指向自身的外键来指示父类别。反向引用是给定父项的子类别,因此 related_name='children'
  • 代码片段有一个指向它所用语言的外键。反向引用是一种语言的片段,所以 related_name='snippets'

For example, with the Student/Courses example found in the Peeewee docs themselves.

那是多对多,因此反向引用不是很“清晰”,因为外键存在于联结表中。您的参照系是联结表,因此在这两种情况下反向引用都是 studentcourses,尽管这没有帮助,因为反向引用只会将您带到联结表。因此,对于多对多,通常可以将反向引用保留为默认值,因为您的查询通常如下所示:

# get students in english 101
Student.select().join(StudentCourse).join(Course).where(Course.name == 'ENGL 101')

# get huey's courses
Course.select().join(StudentCourse).join(Student).where(Student.name == 'Baby Huey')

关于orm - 了解 PeeWee 的 related_name 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26976059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com