Django ModelForm 小实例1
Posted icemonkey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django ModelForm 小实例1相关的知识,希望对你有一定的参考价值。
1.models.py
ASSET_STATUS = ( (str(1), u"使用中"), (str(2), u"未使用"), (str(3), u"故障"), (str(4), u"其它"), ) ASSET_TYPE = ( (str(1), u"物理机"), (str(2), u"虚拟机"), (str(3), u"容器"), (str(4), u"网络设备"), (str(5), u"安全设备"), (str(6), u"其他") ) class Idc(models.Model): ids = models.CharField(u"机房标识", max_length=255, unique=True) name = models.CharField(u"机房名称", max_length=255, unique=True) address = models.CharField(u"机房地址", max_length=100, blank=True) tel = models.CharField(u"机房电话", max_length=30, blank=True) contact = models.CharField(u"客户经理", max_length=30, blank=True) contact_phone = models.CharField(u"移动电话", max_length=30, blank=True) jigui = models.CharField(u"机柜信息", max_length=30, blank=True) ip_range = models.CharField(u"IP范围", max_length=30, blank=True) bandwidth = models.CharField(u"接入带宽", max_length=30, blank=True) memo = models.TextField(u"备注信息", max_length=200, blank=True) def __str__(self): return self.name class Meta: verbose_name = u‘数据中心‘ verbose_name_plural = verbose_name class Host(models.Model): hostname = models.CharField(max_length=50, verbose_name=u"主机名", unique=True) ip = models.GenericIPAddressField(u"管理IP", max_length=15) idc = models.ForeignKey(Idc, verbose_name=u"所在机房", on_delete=models.SET_NULL, null=True, blank=True) other_ip = models.CharField(u"其它IP", max_length=100, blank=True) asset_no = models.CharField(u"资产编号", max_length=50, blank=True) asset_type = models.CharField(u"设备类型", choices=ASSET_TYPE, max_length=30, null=True, blank=True) status = models.CharField(u"设备状态", choices=ASSET_STATUS, max_length=30, null=True, blank=True) os = models.CharField(u"操作系统", max_length=100, blank=True) vendor = models.CharField(u"设备厂商", max_length=50, blank=True) up_time = models.CharField(u"上架时间", max_length=50, blank=True) cpu_model = models.CharField(u"CPU型号", max_length=100, blank=True) cpu_num = models.CharField(u"CPU数量", max_length=100, blank=True) memory = models.CharField(u"内存大小", max_length=30, blank=True) disk = models.CharField(u"硬盘信息", max_length=255, blank=True) sn = models.CharField(u"SN号 码", max_length=60, blank=True) position = models.CharField(u"所在位置", max_length=100, blank=True) memo = models.TextField(u"备注信息", max_length=200, blank=True) def __str__(self): return self.hostname
2.forms.py
from django import forms from .models import Host from django.forms.widgets import * class HostForm(forms.ModelForm): class Meta: model = Host exclude = ("id",) widgets = { ‘hostname‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘, ‘placeholder‘: u‘必填项‘}), ‘ip‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘, ‘placeholder‘: u‘必填项‘}), ‘other_ip‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘group‘: Select(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘asset_no‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘asset_type‘: Select(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘status‘: Select(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘os‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘vendor‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘up_time‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘cpu_model‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘cpu_num‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘memory‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘disk‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘sn‘: TextInput(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘idc‘: Select(attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), ‘position‘: TextInput( attrs={‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘, ‘placeholder‘: u‘物理机写位置,虚机写宿主‘}), ‘memo‘: Textarea(attrs={‘rows‘: 4, ‘cols‘: 15, ‘class‘: ‘form-control‘, ‘style‘: ‘width:530px;‘}), }
3.urls.py
url(r‘^host_get‘, views.host_get, name="host_get")
4.views.py
from t1.models import Idc, Host from t1.forms import HostForm def host_get(request): if request.method == "GET": h_form = HostForm() idc_obj = Idc.objects.all().values("name") print(idc_obj) return render(request, "t1/host_get.html", locals()) elif request.method == "POST": h_form = HostForm(request.POST) if h_form.is_valid(): print(h_form.cleaned_data) # Host.objects.create(**h_form.cleaned_data) h_form.save() return HttpResponse("数据添加成功") else: info_error = h_form.errors # <ul class="errorlist"><li>hostname<ul class="errorlist"><li>具有 主机名 的 Host 已存在。</li></ul></li></ul> print(info_error.as_json()) # msg_error = info_error.as_json() msg_error = info_error return render(request, "msg_error.html", locals())
5.html
#msg_error.html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <span style="color: red;">{{ msg_error }}</span> </body> </html> #host_get.html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action=" {% url ‘host_get‘ %}" method="POST"> {{ h_form.as_p }} <input type="submit" value="提交"> {% csrf_token %} </form> </body> </html>
5.测试
以上是关于Django ModelForm 小实例1的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 ModelForm 使用 FileField 添加新的 Django 模型实例?
Django:使用小部件来限制 ModelForm 中的选择