django - 在 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
解决方案
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
推荐阅读
- php - 根据语言更改 WooCommerce 货币
- ruby-on-rails - 安装 RVM 时,它返回一个警告:上述文件包含 PATH= 内部没有 $PATH,这可能会破坏 RVM
- python - Pygame 垂直碰撞
- python - 试图让几个覆盆子交流
- c++ - 如何在 C++ 中正确添加库?
- android - 具有自定义字体/样式的 Android Firebase InAppMessaging
- python - Python3 流式字符串替换
- node.js - AWS API Gateway 未被添加为 AWS Lambda 的触发器
- php - PHP - 提取两个单词之间的字符串作为数组的一部分
- css - 文本溢出:网格列中弹性框中的省略号