gpt4 book ai didi

python - Django ModelMultipleChoiceField 不显示正确的选择名称

转载 作者:行者123 更新时间:2023-11-29 13:18:53 28 4
gpt4 key购买 nike

我正在尝试从我的 postgres 数据库的 View 中创建多选字段,但是网页显示不正确。具体来说,虽然它提供了正确数量的选择,但它没有通过“check_name”字段命名它们,而是将每个选择命名为“Check object”。这是我的代码:

模型.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'

表单.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 数据库中名为“precheck_check”的 View 中提取数据。它似乎正确地看到了 View ,因为它为我提供了正确数量的选择。

最佳答案

最简单的修复是添加 __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(...)

关于python - Django ModelMultipleChoiceField 不显示正确的选择名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45168925/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com