#python #django #forms #choicefield
#python #django #формы #choicefield
Вопрос:
Итак, в основном вот что я пытаюсь сделать:
Я хотел бы иметь возможность сделать некоторые поля доступными только для чтения в зависимости от пользователя.
Пока это просто, но здесь возникает проблема, мне нужно сделать некоторые выбранные входные данные доступными только для чтения и хорошо…они плохо работают только для чтения. Дело в том, что пользователь все еще может играть с ним, даже если новое значение не отправлено. Я хочу, чтобы поле выбора было отключено, но если я это сделаю, значение не отправляется через POST, и возникает проблема с методом form valid.
Итак, после прочтения я понимаю, что единственный способ — отключить все поля, кроме того, которое выбрано по умолчанию?
Как это возможно
Вот что у меня есть до сих пор:
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
super(TeamForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk is None:
self.fields['division'].initial = 1
user_role = self.user.memberaccount.get_role()
if user_role != 'admin':
И вот где я хочу отключить выбор….
Большое спасибо за вашу помощь, Ара
Ответ №1:
Я вижу здесь два возможных варианта:
- создайте пользовательский виджет, который будет отображать отключенный выбор вместе со скрытым вводом, содержащим значение для отправки https://docs.djangoproject.com/en/dev/ref/forms/widgets/#customizing-widget-instances
- установите для поля значение required=False и создайте метод clean_division() внутри вашей формы для заполнения поля, если оно не было отправлено: https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute