postgres db의보기에서 다중 선택 필드를 만들려고하는데 웹 페이지가 잘못 표시됩니다. 특히, 올바른 수의 선택을 제공하지만 "check_name"필드로 이름을 지정하지 않고 대신 모든 선택의 이름을 'Check object'로 지정합니다. 내 코드는 다음과 같습니다.
models.py
class Check(models.Model):
pkey = models.AutoField(primary_key=True)
cif = models.CharField(max_length=255)
check_name = models.CharField(max_length=255)
description = models.TextField()
class Meta:
managed = False
db_table = 'precheck_check'
forms.py
class ProcessFileForm(forms.Form):
checks_to_run = forms.ModelMultipleChoiceField(
queryset = Check.objects.all(),
to_field_name = "check_name",
widget = forms.CheckboxSelectMultiple,
)
views.py
def successful_upload(request):
if request.method == 'POST':
form = ProcessFileForm(request.POST, user=request.user)
if form.is_valid():
return render(request, 'precheck/checks_successful.html')
else:
form = ProcessFileForm()
return render(request, 'precheck/select_checks.html',{'form':form})
참고로 postgres db의 'precheck_check'라는 뷰에서 데이터를 가져옵니다. 올바른 선택 수를 제공하기 때문에보기가 올바르게 보이는 것 같습니다.
가장 간단한 수정은 모델에 __str__
메소드를 추가하는 것 Check
입니다.
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible # only if you need to support Python 2
class Check(models.Model):
pkey = models.AutoField(primary_key=True)
cif = models.CharField(max_length=255)
check_name = models.CharField(max_length=255)
description = models.TextField()
class Meta:
managed = False
db_table = 'precheck_check'
def __str__(self):
return self.check_name
__str__
메서드의 결과와 다른 값을 표시 하려면을 하위 클래스로 ModelMultipleChoiceField
만들고 재정의 할 수 있습니다 label_from_instance
.
from django import forms
class MyModelMultipleChoiceField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.check_name
그런 다음 다음 형식의 필드를 사용합니다.
class ProcessFileForm(forms.Form):
checks_to_run = forms.MyModelMultipleChoiceField(...)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다