Когда я собираюсь создать экземпляр модели через пользовательский интерфейс, я бы хотел по умолчанию поле (скажем, «статус» для значения «черновик»).Я пытался сделать это в форме в ` 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](https://i.stack.imgur.com/jO7D6.png)
После сохранения значение все еще там, но форма жалуется: ![enter image description here](https://i.stack.imgur.com/Gh1nA.png)
Использование readonly
в качестве атрибута делает поле доступным только для чтения, но его по-прежнему можно редактировать: ![enter image description here](https://i.stack.imgur.com/LHgah.png)