Заполнение кортежа объектами модели
В моей форме личной информации есть простой контрольный список, который могут заполнять пользователи. Этот контрольный список получает свои варианты из кортежа, а этот кортеж получает свои элементы из другой модели, называемой полем, следующим образом:
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
должно обработать данные в форме для вас, не делая ничего "вручную".