Автозаполнение заполнителя формы модели Django с именем модели текущего проекта

Я не хочу автоматически заполнять поля ProjectForm с текущим значением поля, то есть:

class ProjectForm(forms.ModelForm):
    project_name  = forms.CharField(label='Project Name', widget=forms.TextInput(attrs={'placeholder': 'fixed_value'}))

Однако вместо фиксированного значения я хотел бы предварительно заполнить поле с именем текущего проекта (если необходимо).

1 ответ

Если у вас есть проект / объект в вашем представлении, вы можете сделать это так:

forms.py:

class ProjectForm(forms.ModelForm):
    project_name = forms.CharField(label='Project Name', widget=forms.TextInput(attrs={'placeholder': 'fixed_value'}))

    class Meta:
        model = Project
        fields = ['project_name']

    def __init__(self, *args, **kwargs):
        placeholder = kwargs.pop("dynamic_placeholder")
        super().__init__(*args, **kwargs)
        self.fields['project_name'].widget.attrs['placeholder'] = placeholder

views.py:

class YourView(FormView):
    form_class = ProjectForm

    def get_form_kwargs(self):
        form_kwargs = super().get_form_kwargs()
        form_kwargs['dynamic_placeholder'] = 'dynamic_value_queried_by_orm'
        return form_kwargs

Я не уверен, что вы подразумеваете под "автопопуляцией". Вы даете placeholder атрибут в качестве примера, но, возможно, вы хотите использовать initial вместо?

self.fields['project_name'].initial = placeholder

Но тогда почему вы не используете UpdateView?

Другие вопросы по тегам