Поля динамического выбора, зависящие от другого поля - PullRequest
0 голосов
/ 21 сентября 2018

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

Я нашел этодругое решение но оно кажется немного странным.

Какие у меня есть варианты?

...