从vi导入数据后如何将下拉数据分配给字段

2024-04-23 07:40:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个下拉列表表单.py为了过滤数据,我得到了一个名为layer_id的变量。像这样进入视野layer_id = kwargs['layer_id']。所有的事情都很好,但当我把它分配给这样的文件时self.fields['apn'].queryset= Field.objects.filter(layer=layer)。调用转到数据库的fields表,而不是分配我在中声明的这些字段表单.py. 那么我可以把谁分配给表单.py你知道吗

class labelModelForm(forms.ModelForm):
    model = Labels_tool_
    fields = ['apn', 'owner_name', 'situs_addr_One', 'situs_addr_Two', 'mailing_addr_One', 'mailing_addr_Two']
    apn = forms.ModelChoiceField(queryset=Field.objects.values_list('name', flat=True), empty_label="(Choose field)")

    def __init__(self, *args, **kwargs):
  //getting layer_id from views
        layer_id = kwargs['layer_id']
        print         layer_id
        layer=Layer.objects.filter(id=layer_id).first()
        x=Field.objects.filter(layer=layer)
         //On this step when modify queryset I get error
        self.fields['apn'].queryset= Field.objects.filter(layer=layer)

Tags: namepyselflayerid表单fieldfields
2条回答

如果您想使用一些变量来形成实例,可以使用get_form_kwargs方法。 您可以在__init__中使用它。你知道吗

#views.py

class ExampleRegisterView(CreateView):
    model = ExampleModel
    form_class = RegisterExampleForm
    template_name = 'example.html'

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['layer_id'] = 12 # for example, I give 12.
        return kwargs

#forms.py

class RegisterExampleForm(forms.ModelForm):
    apn = forms.ChoiceField(label="test")
    class Meta:
        model = ExampleModel
        fields = ['yourfield', ]
    def __init__(self, *args, **kwargs):
        layer_id = kwargs.pop('layer_id', None)
        super().__init__(*args, **kwargs)
        if layer_id:
            layer = Layer.objects.get(id=layer_id).first()
        self.fields['apn'].choices = Field.objects.filter(layer=layer)
def __init__(self, *args, **kwargs):
    layer_id = kwargs.pop('layer_id', None)
    super(labelModelForm, self).__init__(*args, **kwargs)
    layer=Layer.objects.filter(id=layer_id).first()
    x=Field.objects.filter(layer=layer)
    self.fields['apn'].queryset= Field.objects.filter(layer=layer)

我希望这对你有帮助

把你的表格改成

class labelModelForm(forms.ModelForm):
      apn = forms.ModelChoiceField(Field.objects.values_list('name', flat=True), empty_label="(Choose field)")
    class Meta:
        model = Labels_tool_
        fields = ['apn', 'owner_name', 'situs_addr_One', 'situs_addr_Two', 'mailing_addr_One', 'mailing_addr_Two']

相关问题 更多 >