Django - значение по умолчанию для поля формы - PullRequest
0 голосов
/ 12 октября 2018

Когда я собираюсь создать экземпляр модели через пользовательский интерфейс, я бы хотел по умолчанию поле (скажем, «статус» для значения «черновик»).Я пытался сделать это в форме в ` init (): ** Модель **

class ForecastConfiguration(Control):
  uuid = kp.ObjectIDField()
  name = kp.ObjectNameField()
  description = kp.ObjectDescriptionField()
  status = models.ForeignKey(Status, blank=False, null=False, editable=True, on_delete=models.PROTECT)

Форма

class ForecastConfigurationCreateForm(forms.ModelForm):

  class Meta:
      model = ForecastConfiguration
      exclude = ['uuid', 'hierarchy_nodes']

  def __init__(self, *args, **kwargs):
      super().__init__(*args, **kwargs)

      # default status
      self.fields['status'] = ModelChoiceField(queryset=ObjectStatus.get_object_status_list(self, is_form=True))

      # status is defaulted when created; will get updated by planning element status
      self.fields['status'].widget.attrs['disabled'] = True

Это прекрасно работает: значение по умолчанию.Однако, когда я отправляю форму, я получаю сообщение об ошибке проверки того, что это поле не может быть пустым, а в форме значение пусто.

Я также пытался сделать это в представлении (тот же результат):

Просмотр

class ForecastConfigurationCreateView(CreateView):
  model = ForecastConfiguration
  form_class = ForecastConfigurationCreateForm
  template_name = 'frontend/base/planning_create.html'
  object = None
  # success_url = ''

   def get(self, request, *args, **kwargs):

    # default status to 'Draft'
    status_id = Status.objects.get(name=constant.status['draft']).uuid
    form = ForecastConfigurationCreateForm(initial={'status': status_id})

    member_formset = MemberFormSet()


    return render(request, self.template_name, {'form': form, 'member_formset': member_formset})

Редактировать

Таким образом, поле status устанавливается по умолчанию при загрузке: on load

После сохранения значение все еще там, но форма жалуется: enter image description here

Использование readonly в качестве атрибута делает поле доступным только для чтения, но его по-прежнему можно редактировать: enter image description here

1 Ответ

0 голосов
/ 12 октября 2018

Вам необходимо добавить свои начальные значения при создании экземпляра формы в представлении.Примерно так:

form = ArticleForm(initial={'headline': 'Initial headline'}, instance=article)

Проверьте документы django для форм моделей прямо здесь .

Надеюсь, это поможет!

...