Файлы динамического выбора, зависящие от другого поля
Я хочу динамически составить список вариантов поля модели Django:
def build_choices(another_model):
choices = DEFAULT_CHOICES
if another_model and another_model.show_extra:
choices = DEFAULT_CHOICES + EXTRA_CHOICES
return choices
class MyOtherModel(models.Model):
show_extra = models.BooleanField(default=False)
class MyModel(models.Model):
another_model = models.ForeignKey(MyOtherModel, blank=True, null=True)
extra_choices = models.CharField(choices=build_choices(another_model))
Это явно не работает как build_choices
Функция оценивается во время загрузки и никогда больше.
Я знаю, что я мог бы сделать это в классе формы, но я также хочу предоставить ту же самую валидацию проверки или нет, я создаю объект через форму или через другие методы.
Чтобы заметить, что динамически построенные варианты выбора зависят от экземпляра связанной модели, если связанная модель недоступна (возможно, мы создаем экземпляр MyModel впервые или нет другой связанной модели), верните варианты по умолчанию.
Я нашел это другое решение, но оно кажется немного странным.
Какие у меня варианты здесь?