gpt4 book ai didi

Django - ModelChoiceField 查询集是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 03:22:01 27 4
gpt4 key购买 nike

我有一个带有 ModelChoiceField 的表单,我想从我的数据库中加载一个表。如果我在表单的 init 上使用这个查询集,那么我的 View 的 form.is_valid 工作正常:

self.fields['categoria_formfield'].queryset = sitio_categoria.objects.exclude(categoria='patrimonio').values_list('idCategoria',flat=True)

enter image description here

该代码在 ModelChoiceField 上显示了一个 id 列表,但我需要的是显示类别列表。所以我使用:
self.fields['categoria_formfield'].queryset = sitio_categoria.objects.exclude(categoria='patrimonio').values_list('categoria',flat=True)

但是使用此代码 .is_valid 不进行验证,我收到一个表单错误:“选择一个有效的选择。该选择不是可用的选择之一。”关于可能是什么问题的一些线索?

Error recived

模型
class sitio_categoria(models.Model):
idCategoria = models.AutoField(primary_key=True)
categoria = models.CharField(max_length=30, null=False, unique=True)

形式
class anadirComercioPaso1_form(forms.Form):
categoria_formfield = forms.ModelChoiceField(widget=forms.Select(attrs={'size':'13', 'onchange':'this.form.action=this.form.submit()'}), queryset=sitio_categoria.objects.none())

def __init__(self, *args, **kwargs):
super(anadirComercioPaso1_form, self).__init__(*args,**kwargs)
self.fields['categoria_formfield'].queryset = sitio_categoria.objects.exclude(categoria='patrimonio').values_list('categoria',flat=True)

最佳答案

请勿使用 values_list ,(或 values),ModelChoiceField需要实际的模型对象。

queryset = sitio_categoria.objects.exclude(categoria='patrimonio')
ModelChoiceField将使用对象的主键进行验证并使用它们的 unicode 表示进行显示。因此,您需要在模型中定义到 unicode 的转换:
class sitio_categoria(models.Model):
idCategoria = models.AutoField(primary_key=True)
categoria = models.CharField(max_length=30, null=False, unique=True)

def __unicode__(self):
return self.categoria

ModelChoiceField documentation

The __unicode__ method of the model will be called to generate string representations of the objects for use in the field’s choices;

关于Django - ModelChoiceField 查询集是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15603249/

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