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