首页 > 解决方案 > 在 cbv 中使用 url 参数初始化模型表单字段

问题描述

我有一个显示模型表单的 cbv 创建视图。我想预选一个显示为选择选择字段的外键字段。
我的问题是模型形式中的 kwargs.get('building_id') 返回 None

class VlanCreateForm(ModelForm):

    class Meta:
        model = Vlan
        fields = ['number','description','network','building']

    def __init__(self, *args, **kwargs):
        building_id = kwargs.get('building_id')
        super().__init__(*args, **kwargs)   
        self.fields['building'].initial = building_id

建筑物是建筑物的外键。如果我放一个像 self.fields['building'].initial = 1 这样的常量,它就可以工作

class VlanCreateView(CreateView):
    model = Vlan
    form_class = VlanCreateForm

网址是

vlan/building/<int:building_id>/create

所以我称之为

vlan/building/1/create

标签: djangodjango-forms

解决方案


class VlanCreateForm(ModelForm):

    class Meta:
        model = Vlan
        fields = ['number','description','network','building']

    def __init__(self, *args, **kwargs):
        self.building_id = kwargs.get('building_id')
        super().__init__(*args, **kwargs)   
        self.fields['building'].initial = self.building_id
  
   def post_url(self):
       return reverse('app_name:url_name',kwargs={'cg_id':self.building_id} )

在表单发布操作中,使用此 post_url 提交表单。然后你在你的视图中得到了 building_id kwargs


推荐阅读