Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django中的相关名称和相关查询名称是什么?_Django_Django Models - Fatal编程技术网

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

我对django框架中关于django中的相关名称和相关查询名称的代码有一个问题。请django专家解释django中的相关名称,代码如下:

相关名称=“+”

相关名称 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()
现在,如果你有一个学校对象,那么你可以通过写查询访问该学校的所有学生

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您应该将您的注释作为答案添加到链接中,请参见。这是一个很好的解释。