Показывать связанные данные внутри объекта внешнего ключа в django admin

#django #django-models #django-admin

#django #django-модели #django-admin

Вопрос:

Я создаю систему управления школой. Несколько пользователей / school_owners создадут несколько классов в соответствии с количеством классов в их школе. Я суперпользователь [т.Е. Супер-администратор], который может получать доступ к классам в каждой школе. Итак, я хочу связать классы определенной школы [т.Е. Внешний ключ] по конкретной ссылке. И я нажму эту ссылку, и класс, связанный с внешним ключом, будет отображаться в списке.

Это должно быть так внутри admin :

  • Название школы 1
  • —- Класс 1
  • —- Класс 2
  • —- Класс 3
  • —- Класс 4
  • Название школы 2
  • —- Класс 1
  • —- Класс 2
  • —- Класс 3
  • —- Класс 4

Здесь school name 1 и school name 2 значение внешних ключей. И когда я нажимаю, school name 1 и school name 2 они должны перенаправить меня на свои соответствующие классы…

Внутри models.py

 from django.db import models
from accounts.models import school_details

class student_class(models.Model):
    connect_school = models.ForeignKey(school_details, on_delete=models.CASCADE, null=True)
    class_list = models.CharField(max_length=95)
    def __str__(self):
            return self.class_list
  

Итак, connect_school [т.Е. school name ] должно отображаться сначала в admin , и когда мы нажимаем на school name classes эту конкретную школу, должно отображаться.

Внутри admin.py

 from django.contrib import admin
from school.models import student_class
# Register your models here.
admin.site.register(student_class)
  

Эта фотография показывает, как эти данные отображаются неорганизованным образом с верхним admin.py .

показывать связанные данные внутри объекта внешнего ключа в Django admin

Комментарии:

1. Пожалуйста, посмотрите, это должно работать так. imgur.com/a/Ul5JTvM . Когда я нажимаю «тестовая школа», она должна перенаправляться на соответствующий класс.

Ответ №1:

На мой взгляд, наименее сложным способом решения этой проблемы являются строки администратора. Вместо того, чтобы указывать на другую страницу администратора, что противоречит структуре администратора Django, вы можете добавить встроенные интерфейсы редактирования для каждого класса.

 # admin.py

from django.contrib import admin
from accounts.models import school_details
from school.models import student_class


class ClassInline(admin.TabularInline):
    model = student_class


class SchoolDetailsAdmin(admin.ModelAdmin):
    model = school_details
    inlines = [ClassInline, ]


admin.site.register(school_details, SchoolDetailsAdmin)
  

Комментарии:

1. Это ничего не дало, кроме school_details модели schowing.

Ответ №2:

Изменить

  def __str__(self):
        return self.class_list
  

Для

  def __str__(self):
        return "[%s] %s" % (self.connect_school.name, self.class_list)
  

(при условии, что connect_school имеет name атрибут)

Комментарии:

1. Братан, это отображает огромный список классов с их соответствующими school name в скобках. это не то, чего я хотел. Я хочу сначала отобразить название школы, и когда я нажимаю на это название школы, должны отображаться их соответствующие классы. Можете ли вы помочь мне с этим требованием. В любом случае спасибо. Ожидание ответа

2. Посмотрите, это должно работать так. imgur.com/a/Ul5JTvM