Django ModelMultipleChoiceField不能显示正确的选择名称[英] Django ModelMultipleChoiceField not displaying correct Choice names

本文是小编为大家收集整理的关于Django ModelMultipleChoiceField不能显示正确的选择名称的处理方法,想解了Django ModelMultipleChoiceField不能显示正确的选择名称的问题怎么解决?Django ModelMultipleChoiceField不能显示正确的选择名称问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在尝试从Postgres DB上的视图创建一个多项选择字段,但是网页显示错误.具体而言,虽然它提供了正确数量的选择数量,但它不会用" check_name"字段命名它们,而是将每个选择'check object'命名.这是我的代码:

model.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"的视图中提取数据.由于它为我提供了正确数量的选择,因此似乎正确地看到了视图.

推荐答案

最简单的解决方法是添加 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__方法结果不同的值,则可以subclass ModelMultipleChoiceField 和Override 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(...)

本文地址:https://www.itbaoku.cn/post/1764220.html