Как обновить опцию выбора экземпляра поля, а не всего поля? - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть поле модели с вариантами выбора:

class MyModel(models.Model):
    myfield = models.CharField(max_length=1000, choices=(('a','a'),('b','b'))

Я знаю, что могу получить в формах доступ к этому конкретному полю и переопределить его параметр choices следующим образом:

self.instance._meta.get_field(field_name).choices = (('c','c'),('d','d'))

но это изменит choices для всей модели, а не для отдельного экземпляра.Как правильно сделать это только для одного конкретного экземпляра или это невозможно?

1 Ответ

0 голосов
/ 26 сентября 2018

Я не знаю ни одного способа изменить выбор полей модели для каждого экземпляра, но если это форма, вы можете переопределить выбор полей формы (пример записан из памяти, поэтому он может быть не точным на 100%).):

класс MyModelForm (forms.ModelForm): класс Meta: model = MyModel

def __init__(self, *args, **kw):
    super(MyModelForm, self).__init__(*args, **kw)
    if some_condition:
        self.fields["myfield"].choices = (...)

Важно : вы хотите переопределить self.fields["myfield"], не self.myfield - последний является атрибутом класса, поэтому его изменение затронет все экземпляры MyModelForm для текущего процесса, что вы обычно не замечаете при запуске сервера dev, но это приводит к очень нестабильному поведению на производстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...