Заполнение кортежа объектами модели

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

class Field(models.Model):
    id = models.AutoField(primary_key=True)
    slug = models.CharField(max_length=16, default='default')
    title = CharField(max_length=32)


INTERESTS = (Field.objects.values_list('slug', 'title'))

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

вот мои упрощенные модели:

class PersonalInfo(models.Model):
    interests = MultiSelectField(choices=INTERESTS, blank=True)

и моя форма:

class Interests(forms.ModelForm):
    interests = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=INTERESTS)

    class Meta:
        model = PersonalInfo
        fields = ['interests']

Не совсем ответ, но он слишком длинный для комментария. Я не знаю, насколько вы "упростили модель", но вы должны изменить interest на ManyToManyField. Сейчас, если любое значение будет удалено из Field, вы получите недействительные данные в базе данных. Если вы будете использовать ManyToManyField, то это обеспечит согласованность данных в вашей БД. Таким образом, ваша модель будет выглядеть следующим образом:

class PersonalInfo(models.Model):
    interests = models.ManyToManyField(Field)

После этого использование ModelForm должно обработать данные в форме для вас, не делая ничего "вручную".

Вернуться на верх