Администратор Django — создание пользовательского списка

#django #django-views #django-templates #django-admin

#django #django-просмотры #django-шаблоны #django-администратор

Вопрос:

Я хочу создать пользовательский вид администратора. В нем должны быть перечислены конкретные объекты из модели и добавлены атрибуты к ней.

Точнее, у меня есть таблицы Student и Lecture. Лекция имеет атрибут enrolled_students, который представляет собой отношение «Многие ко многим» (студент может быть зачислен на несколько лекций; на лекции может быть много зарегистрированных студентов). Студенты могут получать баллы за лекцию, что определяет их оценку.

Поэтому я хотел бы предоставить представление администратора, в котором перечислены все учащиеся конкретной лекции, а также их достигнутые баллы и оценки. Оценка вычисляется лениво, так как баллы часто меняются.

Как я могу это реализовать? Возможно ли это с помощью встроенных методов?

Большое спасибо!

РЕДАКТИРОВАТЬ 1 Я добавил исходный код (упрощенный):

Лекция:

 class Lecture(UUIDModel, TimeFramedModel):
    participants = models.ManyToManyField(
        settings.AUTH_USER_MODEL,
        related_name="enrolled_lectures",
    )
    title = models.CharField(
        max_length=100,
        unique=True,
    )
    grading_scale = models.ForeignKey(
        GradingScale, on_delete=models.SET_NULL, blank=True, null=True
    )


    def get_score(self, user):
        """ Returns score of a particular user. """
        score = (
            user.submission_set
            .filter(exercise__lesson__lecture=self, score__isnull=False, exercise__rated=True)
            .values("exercise")
            .annotate(max_exercise_score=models.Max("score"))
            .aggregate(total_score=models.Sum("max_exercise_score"))["total_score"]
        )
        return score if score else 0
 

Студент (модель пользователя):

 class CustomUser(AbstractUser):
    username = None
    email = models.EmailField(_("email address"), unique=True)
    full_name = models.CharField(_("full name"), max_length=130)
    )

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = ["full_name"]

    objects = UserManager()
 

GradingScale содержит метод get_grade(оценка). Вы можете найти весь исходный код здесь.

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

1. Можете ли вы поделиться моделями Student и Lecture ?

2. @AjayLingayat Я добавил исходный код.