django 格式化数据查询集结果以在表单中使用,ModelChoiceField查询集选项

ifsvaxew  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(87)

我有一个Django项目,数据在Postgres数据库中。
我想创建一个带有ModelChoiceField的表单,在这里我可以选择在以前的查询集中获得的数据。
当我创建查询集从数据库中获取数据时:

list_result_queryset = BdimMaestraDatos.objects.filter(fecha_baja__isnull=True).values_list('nombre').distinct()

字符串
我得到这个结果:

<QuerySet [('PEDRO',), ('JUAN',), ('ANDRES',), ('PABLO',), ('SOFIA',)]>


当我在de模板中显示结果时,它们被提供了,但带有“脏”格式,如括号,逗号等。
请问,我怎么能在表格上显示出来呢?ModelChoiceField查询选项只查询名称PEDRO、JUAN、巴勃罗等,而不查询('PEDRO ',)、('JUAN',)等?
这是我的form.py代码

from django import forms
from .models import BdimMaestraDatos,

lista_queryset_nombres_activos = BdimMaestraDatos.objects.filter(fecha_baja__isnull=True).values_list('nombre').distinct()
print('Resultado Queryset values list: %s' %lista_queryset_nombres_activos)

class MaestraDatosForm(forms.Form):
    Seleccionar_Nombre = forms.ModelChoiceField(label="Nombre", queryset=lista_queryset_nombres_activos)


这是我的BdimMaestraDatos模型

class BdimMaestraDatos(models.Model):
    nombre = models.CharField(db_column='NOMBRE', max_length=32, blank=True, null=True)  # Field name made lowercase.
    cc = models.CharField(db_column='CC', max_length=2, blank=True, null=True)  # Field name made lowercase.
    estado = models.DecimalField(db_column='ESTADO', max_digits=1, decimal_places=0, blank=True, null=True)  # Field name made lowercase.
    red = models.CharField(db_column='RED', max_length=32, blank=True, null=True)  # Field name made lowercase.
    ger = models.CharField(db_column='GER', max_length=32, blank=True, null=True)  # Field name made lowercase.
    est = models.TextField(db_column='EST', blank=True, null=True)  # Field name made lowercase. This field type is a guess.
    fecha_baja = models.DateField(db_column='FECHA_BAJA', blank=True, null=True)  # Field name made lowercase.
    fecha_alta = models.DateField(db_column='FECHA_ALTA', blank=True, null=True)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'BDIM_MAESTRA_DATOS'


谢啦,谢啦

gg0vcinb

gg0vcinb1#

最后我解决了我的问题,现在数据显示在表单中。ModelChoiceField是干净的。
解决方案是在value_list中被过滤的字段之后添加参数flat=True

list_result_queryset = BdimMaestraDatos.objects.filter(fecha_baja__isnull=True).values_list('nombre',**flat=True).distinct()

字符串
返回的结果是:

<QuerySet ['PEDRO', 'JUAN', 'ANDRES', 'PABLO', 'SOFIA']>


感谢大家!

相关问题