Как проверить уникальные значения атрибутов объекта по отношению к другим атрибутам этого объекта?
Я делаю систему управления школой, где каждый ученик изучает 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}'