django中的相关名称和相关查询名称是什么?
我对django框架中关于django中的相关名称和相关查询名称的代码有一个问题。请django专家解释django中的相关名称,代码如下: 相关名称=“+”相关名称 Django在每个对象上维护向后关系,以便轻松访问相关对象。假设您有两个名为“学校”和“学生”的模型,一个学校可以有多个学生。所以你会有这样的模型定义django中的相关名称和相关查询名称是什么?,django,django-models,Django,Django Models,我对django框架中关于django中的相关名称和相关查询名称的代码有一个问题。请django专家解释django中的相关名称,代码如下: 相关名称=“+”相关名称 Django在每个对象上维护向后关系,以便轻松访问相关对象。假设您有两个名为“学校”和“学生”的模型,一个学校可以有多个学生。所以你会有这样的模型定义 class School(models.Model): name = models.CharField(max_length=55) city = models.C
class School(models.Model):
name = models.CharField(max_length=55)
city = models.Charfield(max_length=55)
class Student(models.Model):
name = models.CharField(max_length=55)
school = models.ForeignKey(School)
class Student(models.Model):
name = models.CharField(max_length=55)
school = models.ForeignKey(School, related_name='students')
# Now you can do
school.students.all()
现在,如果你有一个学校对象,那么你可以通过写查询访问该学校的所有学生
school = School.objects.get(id=1)
# Now if need all students of this school, first thing that come in your mind would be
Student.objects.filter(school=school)
# But instead of this, you can access all students by
school.student_set.all()
这里的student\u set
是Django创建的默认相关名称。但是你可以有这样的自定义相关名称
class School(models.Model):
name = models.CharField(max_length=55)
city = models.Charfield(max_length=55)
class Student(models.Model):
name = models.CharField(max_length=55)
school = models.ForeignKey(School)
class Student(models.Model):
name = models.CharField(max_length=55)
school = models.ForeignKey(School, related_name='students')
# Now you can do
school.students.all()
相关名称中的特殊字符
如果定义了related\u name='+'
,则对象和school.student\u set.all()
上的反向关系将不可用
如果您不希望Django创建向后关系,请将related_name设置为“+”或以“+”结尾。例如,这将确保用户模型不会与此模型有反向关系:
相关查询名称
related_query_name与related_name类似,但在queryset中使用它
如果您需要通过学校模型对学生应用一些过滤器,那么您可以这样做
School.objects.filter(student__name='abc')
但如果您定义了相关的查询名称,那么您就可以
class Student(models.Model):
name = models.CharField(max_length=55)
school = models.ForeignKey(School, related_query_name='abc')
# Now you can do
School.objects.filter(abc__name='abc')
请参阅文档以供进一步参考:它是关系的名称,相反。如果使用加号,则不会添加加号。有关详细信息,请参阅。@WillemVanOnsem您应该将您的注释作为答案添加到链接中,请参见。这是一个很好的解释。