如何指定 forms.select() 必须在 django 中显示的元素



我正在用 Django 开发一个项目,我遇到了一个小问题。

我正在尝试制作一个 forms.py,并且我有一个带有"forms.select(("的小部件表单。

我只想知道如果我想指定该小部件的哪些元素应该显示,我该怎么办:

这是我 forms.py 的一部分:

fields = [
            ...
            'id_clasificacion_fk',
            ...
            ]
        labels = {
            ...
            'id_clasificacion_fk': 'Clasificación del producto',
            ...
        }
        widgets = {
            ...
            'id_clasificacion_fk': forms.Select(attrs={'class':'form-control'}),
            ...
        }

如您所见,我有小部件"id_clasification_fk",但它向我显示了"id_clasificacion_fk"中的所有元素。

你只想显示具有"existencia=True"的元素。

这是我的 models.py:

class Articulo(models.Model):
    ...
    existencia=models.BooleanField(default=True)
    ...
    #llaves 
    id_clasificacion_fk=models.ForeignKey('Clasificacion', null=True, blank=True, on_delete=models.CASCADE, db_column='id_clasificacion_fk')
    def __str__(self):
        return "("+str(self.id)+") " + self.nombre_producto

同样,我只想展示id_clasificacion_fk中将"existencia"设置为True的元素,以及这些元素。

如果有人能帮我解决这个问题,我将不胜感激。

多谢。

你应该能够使用

queryset=Classification.objects.filter(existencia=True)
它的位置

取决于您要指定它的位置以及您是否正在使用模型窗体。 当您定义字段或在窗体的init函数中或在视图中指定窗体时,您应该能够定义它

例如,在视图中,您将拥有

form = MyForm()
form.fields['id_clasificacion_fk'].queryset=Classification.objects.filter(existencia=True)

最新更新