django之form表单select配合model的使用

本文详细介绍了如何使用Python的Django框架设计并实现一个主机配置表单,包括主机名、IP地址、用户、密码、端口、私钥及平台选择等字段,通过ModelForm与自定义表单字段展示数据录入界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

forms.py文件

class HostForm(forms.Form):
    hostname = forms.CharField(label=_('主机名'), max_length=128, widget=forms.TextInput(attrs={'class': 'form-control', "placeholder": "主机名", 'autofocus': ''}))
    ip = forms.CharField(label=_('ip地址'), max_length=128, widget=forms.TextInput(attrs={'class': 'form-control',  "placeholder": "ip地址"}))
    remoteuser = forms.CharField(label=_('用户'), max_length=128, widget=forms.TextInput(attrs={'class': 'form-control', "placeholder": "用户", 'autofocus': ''}), initial="root")
    password = forms.CharField(label=_('密码'), max_length=128, widget=forms.TextInput(attrs={'class': 'form-control', "placeholder": "密码", 'autofocus': ''}), required=False)
    port = forms.CharField(label=_('端口'), max_length=128, widget=forms.TextInput(attrs={'class': 'form-control',  "placeholder": "端口"}), initial=22)
    private_key = forms.CharField(label=_('私钥'), max_length=2048, widget=forms.Textarea(attrs={'class': 'form-control',  "placeholder": "私钥"}), required=False)
    # platform = forms.CharField(label=_('平台'), max_length=2048, widget=forms.Select((), attrs={'class': 'form-control',  "placeholder": "平台"}), required=False)
    platform = forms.CharField(label=_('平台'), max_length=2048, widget=forms.Select(attrs={'class': 'form-control',  "placeholder": "私钥"}))

    def __init__(self, *args, **kwargs):
        super(HostForm, self).__init__(*args, **kwargs)
        self.fields["platform"].widget.choices = models.Platform.objects.all().values_list("id", "platform")

model.py文件


class Platform(models.Model):
    id = models.AutoField(primary_key=True)
    platform = models.CharField(max_length=128, default="内网")

view.py文件

@method_decorator(login_required(), name='dispatch')
class CreateHost(View):
    template_name = "assets/create.html"
    form = forms.HostForm()
    def get(self, request, *args, **kwargs):
        form = forms.HostForm()

        hosts_list = []
        return render(request, 'assets/create.html', locals())
        # return super().get(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        hostname = request.POST.get("hostname")
        ip = request.POST.get("ip")
        remoteuser = request.POST.get("remoteuser")
        password = request.POST.get("password")
        port = request.POST.get("port")
        private_key = request.POST.get("private_key")
        # 获取到id(主键)
        platformid = request.POST.get("platform")
        # 根据id获取对应的数据
        platform = Platform.objects.filter(id=platformid)[0].platform

前端引用

              <div class="form-group">
                    {{ form.platform.label }}
                <!--指定 date标记-->
                    {{ form.platform }}```

效果图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值