Как проверить уникальные значения атрибутов объекта по отношению к другим атрибутам этого объекта?

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

Я хочу проверить, что атрибуты каждого студента относительно предметов, которые они берут, уникальны, чтобы не было предметов, которые берутся дважды (например, чтобы не было химии в Science и химии в Science2)

Edit: Я подумал о том, чтобы перебрать атрибуты темы и выдать ошибку, если любые два значения атрибута темы равны друг другу, но я не знал, как это реализовать, поскольку я все еще очень новичок в Django и программировании в целом.

models.py

from unittest.util import _MAX_LENGTH
from django.db import models
from django.utils.translation import gettext_lazy as _
from students.choices import *
from django.core.exceptions import ValidationError

# Create your models here.

class Student(models.Model):
    def __init__(self, student_number, first_name, last_name, email, english, math, language, science, science2):
        self.student_number = student_number
        self.first_name = first_name
        self.last_name = last_name
        self.email = email
        self.english = english
        self.math = math
        self.language = language
        self.science = science
        self.science2 = science2

    def __len__(self):
        return len(vars(self))

    student_number = models.PositiveIntegerField()
    first_name = models.CharField(max_length=50) #Attribute containing student's first name, cannot exceed 50 characters
    last_name = models.CharField(max_length=50) #Attribute containing student's last name, cannot exceed 50 characters
    email = models.EmailField(max_length=100) #Attribute containing student's email, cannot exceed 100 characters
    
    #Subjects
    english = models.CharField(max_length=2, choices=English.choices, null=True, blank=False)
    math = models.CharField(max_length=2, choices=Math.choices, null=True, blank=False)
    language = models.CharField(max_length=1, choices=Language.choices, null=True, blank=False)
    science = models.CharField(max_length=4, choices=Science.choices, null=True, blank=False)
    science2 = models.CharField(max_length=4, choices=Science.choices, validators=[validate_subjects] null=True, blank=False)

    def __str__(self):
        return f'{self.first_name} {self.last_name}'
Вернуться на верх