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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django ModelForm 中获取实例

如何通过 ModelForm 使用 FileField 添加新的 Django 模型实例?

Django ModelForm 覆盖小部件

Django:使用小部件来限制 ModelForm 中的选择

Django ModelForm 使用不同的 ForeignKeys 创建多个实例

如何使用预先填写的必填字段实例化 Django ModelForm?