Django (비 모델) 양식 미리 채우기
일부 정보를 기반으로 장고 양식의 데이터를 미리 채우려 고하지만 ModelForm을 사용하지 않기 때문에 인스턴스를 설정할 수 없습니다.
이것은 정말 쉬울 것 같지만 어떤 이유로이 작업을 수행하는 방법을 알려주는 문서를 찾을 수 없습니다. 이것은 내 양식입니다.
class MyForm(forms.Form):
charfield1 = forms.CharField(max_length=3)
charfield2 = forms.CharField(max_length=3)
choicefield = forms.ModelChoiceField(MyModel.objects.all())
나는 단지 시도했다.
form = MyForm()
form.charfield1 = "foo"
form.charfield2 = "bar"
# a model choice field
form.choicefield = MyModel.objects.get(id=3)
작동하지 않습니다.
시험:
form = MyForm({'charfield1': 'foo', 'charfield2': 'bar'})
Form
객체 생성자는 필드 값의 사전을 취할 수 있습니다. 이렇게하면 데이터의 유효성을 검사하고 데이터가 표시된 HTML로 양식을 렌더링하는 데 사용할 수있는 바인딩 된 양식이 생성됩니다. 자세한 내용 은 양식 API 문서를 참조하세요.
편집하다:
완전성을 위해 양식을 바인딩하지 않고 일부 필드에 대한 초기 값을 선언하려는 경우 대신 다음을 사용할 수 있습니다.
form = MyForm(initial={'charfield1': 'foo', 'charfield2': 'bar'})
자세한 내용은 초기 값 문서를 참조 하십시오.
Django 양식을 채우는 방법에는 두 가지가 있습니다.
첫 번째는 사전을 인스턴스화 할 때 첫 번째 인수로 전달하는 것입니다 (또는 data
동일한 kwarg 로 전달 ). 이는 POST 데이터를 사용하여 양식을 채우고 유효성을 검사하려는 경우 수행하는 작업입니다.
data_dict = {'charfield1': 'data1', 'charfield2': 'data2', 'choicefield': 3}
form = MyForm(data_dict)
그러나 이렇게하면 양식에 대한 유효성 검사 가 트리거 되므로 처음부터 유효하고 완전한 데이터를 실제로 전달하는 경우에만 작동합니다. 그렇지 않으면 오류로 시작됩니다.
양식을 채우는 다른 방법은 initial
매개 변수 를 사용하는 것입니다 ( 여기에 문서화 됨 ). 이는 양식 필드에 대한 초기 값을 제공하지만 유효성 검증을 트리거 하지 않습니다 . 따라서 예를 들어 모든 값을 채우지 않는 경우에 적합합니다.
form = MyForm(initial=data_dict)
를 통해 선택 필드를 채우려면 initial
pk 값을 사용하십시오.
model_to_dict ()를 사용하여 인스턴스를 사전으로 변환 한 다음이를 양식에 채울 수 있습니다. 다음과 같이 작동합니다.
from django.forms.models import model_to_dict
...
my_obj = MyModel.objects.get(abc=123)
form = MyForm(initial=model_to_dict(my_obj))
참고 : 저는 django 버전 1.3을 사용하고 있습니다.
그만한 가치가있는 경우이를 수행하는 FormView
클래스 기반보기 방법은 FormView
의 get_initial
함수 를 재정의하는 것 입니다. 에서 양식을 인스턴스화하는 get_initial
데 사용하는 초기 키워드 인수를 반환합니다 get_form_kwargs
.
문서 :
샘플 코드 :
from django.views.generic.edit import FormView
class MyFormView(FormView):
def get_initial(self):
initial = super(MyFormView, self).get_initial()
# update initial field defaults with custom set default values:
initial.update({'charfield1': 'foo', 'charfield2': 'bar'})
return initial
참조 URL : https://stackoverflow.com/questions/936376/prepopulate-django-non-model-form
'programing' 카테고리의 다른 글
라 라벨의 유창한 쿼리 빌더로 카운트를 선택하는 방법은 무엇입니까? (0) | 2021.01.17 |
---|---|
CLion은 실행 파일을 어디에 저장합니까? (0) | 2021.01.17 |
항목을 가로로 배치하는 WPF ListBox (0) | 2021.01.17 |
Ruby : ENV 변수가 있으면 가장 간결하게 사용하고 그렇지 않으면 기본값을 사용합니다. (0) | 2021.01.17 |
Functor가 아닌 (또는 Traversable이 아닌) Foldable의 예? (0) | 2021.01.17 |