Что делать, если значение отличается от всех определенных вариантов для выбора полей Django?

В настоящее время я работаю над веб-приложением Django. Я определил модель следующим образом:

class MyModel(models.Model):

    fav_subject_choices=[
        ('physics', 'Physics'),
        ('chem', 'Chemistry'),
        ('math', 'Maths'),
    ]

    user = models.ForeignKey(User, on_delete=models.CASCADE)
    student_name = models.CharField(max_length=100)
    fav_subject = models.CharField(max_length=50, choices=fav_subject_choices, default='physics')

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

Это нормально, так как я не хочу изменять данные, которые уже есть, вместо этого я хочу добавить любимый предмет только для студентов, чьи данные по любимому предмету отсутствуют. Как это можно сделать? Есть ли вариант, при котором поле может иметь значение, отличное от заданных вариантов?

PS. Это просто фиктивный сценарий, который я создал. Но он точно такой же, как и проблема, с которой я столкнулся.

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

class FavoriteSubjectChoices(models.Model):
     
    subject_name = models.CharField(max_length=100,null=true,blank=True,unique=True)

   def __str__(self):
       return self.subject_name


class MyModel(models.Model):

    
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    student_name = models.CharField(max_length=100)
    fav_subject = models.ForeignKey(FavoriteSubjectChoices, on_delete=models.CASCADE)
Вернуться на верх