tengo un problema con el código en django framework con respecto arelated_name yrelated_query_name en django. por favor, el experto en django explica el nombre relacionado en django, el código está a continuación:
nombre_relacionado='+'
Django mantiene una relación hacia atrás en cada objeto para facilitar el acceso a los objetos relacionados. Suponga que tiene dos modelos llamados "Escuela" y "Estudiante" y una escuela puede tener varios estudiantes. Entonces tendrás una definición de modelo algo como esto
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)Ahora, si tiene objetos escolares, puede acceder a todos los estudiantes de esa escuela escribiendo una consulta explícitamente.
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() Aquí student_set es el nombre relacionado predeterminado creado por Django. Pero puede tener sus nombres relacionados personalizados como este
class Student(models.Model): name = models.CharField(max_length=55) school = models.ForeignKey(School, related_name='students') # Now you can do school.students.all() Si defines related_name='+' entonces la relación hacia atrás no estará disponible en el objeto y school.student_set.all() te dará un error.
Si prefiere que Django no cree una relación inversa, establezca el nombre_relacionado en '+' o termínelo con '+'. Por ejemplo, esto garantizará que el modelo Usuario no tenga una relación inversa con este modelo:
related_query_name es similar arelated_name pero se usa en queryset.
Si necesita aplicar algún filtro en el modelo de estudiante a través de la escuela, entonces lo haría
School.objects.filter(student__name='abc')Pero si defines related_query_name entonces puedes hacer
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')Consulte el documento para obtener más referencias: https://docs.djangoproject.com/en/3.0/ref/models/fields/