Django에서 폼 초기화 후 필드 값 설정하기
Django에서 폼 초기화 후 필드 값 설정하기
다음은 Django에서 폼 초기화 후 필드 값을 설정하는 몇 가지 방법입니다.
initial 속성 사용
initial
속성은 폼 위젯에 초기 값을 설정하는 데 사용됩니다. 폼을 초기화하기 전에 initial
속성을 설정하여 특정 필드의 값을 설정할 수 있습니다.
from django.forms import ModelForm
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ['name', 'email']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['name'].initial = 'John Doe'
clean() 메서드 사용
clean()
메서드는 폼 데이터를 검증하고 처리하기 전에 호출됩니다. clean()
메서드에서 특정 필드의 값을 변경하여 폼 초기화 후 필드 값을 설정할 수 있습니다.
from django.forms import ModelForm
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ['name', 'email']
def clean(self):
cleaned_data = super().clean()
cleaned_data['name'] = 'John Doe'
return cleaned_data
save() 메서드 사용
save()
메서드는 폼 데이터를 모델 인스턴스로 저장합니다. save()
메서드를 재정의하여 특정 필드의 값을 변경하여 폼 초기화 후 필드 값을 설정할 수 있습니다.
from django.forms import ModelForm
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ['name', 'email']
def save(self, commit=True):
instance = super().save(commit=False)
instance.name = 'John Doe'
instance.save()
return instance
JavaScript 사용
JavaScript를 사용하여 폼 초기화 후 필드 값을 설정할 수 있습니다.
document.getElementById('id_name').value = 'John Doe';
jQuery 사용
$('#id_name').val('John Doe');
Django에서 폼 초기화 후 필드 값 설정 예제
models.py
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=255)
email = models.EmailField()
forms.py
from django.forms import ModelForm
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ['name', 'email']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['name'].initial = 'John Doe'
views.py
from django.views.generic import FormView
class MyFormView(FormView):
template_name = 'my_form.html'
form_class = MyForm
def get_success_url(self):
return reverse_lazy('home')
my_form.html
{% extends 'base.html' %}
{% block content %}
<form action="{% url 'my_form' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
{% endblock %}
이 예제에서는 initial
속성을 사용하여 name
필드의 초기 값을 "John Doe"로 설정합니다.
실행 결과:
- 사용자가 폼 URL에 접근하면 폼이 표시됩니다.
name
필드에는 "John Doe"라는 값이 미리 입력되어 있습니다.- 사용자가 폼을 제출하면
clean()
메서드가 호출됩니다. clean()
메서드에서name
필드의 값을 "John Doe"로 변경합니다.- 폼 데이터가 모델 인스턴스로 저장됩니다.
- 사용자는 성공 URL로 리디렉션됩니다.
Django에서 폼 초기화 후 필드 값 설정 대체 방법
form_valid()
메서드는 폼 데이터가 유효한 경우 호출됩니다. form_valid()
메서드에서 특정 필드의 값을 변경하여 폼 초기화 후 필드 값을 설정할 수 있습니다.
from django.views.generic import FormView
class MyFormView(FormView):
template_name = 'my_form.html'
form_class = MyForm
def form_valid(self, form):
instance = form.save(commit=False)
instance.name = 'John Doe'
instance.save()
return super().form_valid(form)
템플릿에서 JavaScript 사용
{% extends 'base.html' %}
{% block content %}
<script>
document.getElementById('id_name').value = 'John Doe';
</script>
<form action="{% url 'my_form' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
{% endblock %}
템플릿에서 jQuery 사용
{% extends 'base.html' %}
{% block content %}
<script>
$('#id_name').val('John Doe');
</script>
<form action="{% url 'my_form' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
{% endblock %}
ModelChoiceField 사용
ModelChoiceField
를 사용하여 모델 인스턴스를 선택할 수 있는 폼 필드를 만들 수 있습니다. ModelChoiceField
의 queryset
속성을 사용하여 초기 선택 항목을 설정할 수 있습니다.
from django.forms import ModelForm
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ['name', 'email']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['name'].queryset = MyModel.objects.filter(name='John Doe')
SelectDateWidget 사용
SelectDateWidget
를 사용하여 날짜 선택 필드를 만들 수 있습니다. SelectDateWidget
의 initial
속성을 사용하여 초기 선택 날짜를 설정할 수 있습니다.
from django.forms import ModelForm
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ['name', 'email', 'birthdate']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['birthdate'].widget = SelectDateWidget(initial=datetime.date(2000, 1, 1))
django