class VirtualNode(models.Model):
VIRTUAL_STATUS = (
(0, '已停止'),
(1, '已启动'),
(2, '正在创建'),
(3, '创建失败'),
)
virtual_id = models.AutoField(verbose_name="虚拟机 ID",primary_key=True)
virtual_name = models.CharField(max_length=30,verbose_name="虚拟机名")
virtual_ip = models.GenericIPAddressField(verbose_name="虚拟 IP")
virtual_cpu = models.IntegerField(verbose_name="虚拟机 cpu(核数)")
virtual_mem = models.IntegerField(verbose_name="虚拟机内存(GB)")
virtual_disk = models.IntegerField(verbose_name="虚拟机硬盘(GB)")
virtual_vmnode = models.ForeignKey(VmNode, verbose_name="所属宿主机")
virtual_vlan = models.ForeignKey(VlanInfo,verbose_name="所属 Vlan")
project = models.CharField(max_length=30,verbose_name="所属项目",null=True,blank=True)
virtual_staus = models.IntegerField(verbose_name='运行状态',choices=VIRTUAL_STATUS,default=0)
class Meta:
verbose_name = "虚拟机节点"
verbose_name_plural = verbose_name
class VirtualNodeForm(forms.ModelForm):
class Meta:
model = VirtualNode
fields = '__all__'
class VirtualNodeAddView(LoginRequireMixin, View):
def get(self, request):
pass
def post(self, request):
virtual_form = VirtualNodeForm(request.POST)
if virtual_form.is_valid():
virtual_form.save()
return JsonResponse({'status':'success'})
else:
msg = virtual_form.errors.values()
return JsonResponse({'status':'fail','msg':'虚拟机添加失败:{}'.format(msg)})
前端的表单只会填 6 个字段
其中 virtual_name 、virtual_ip 会根据某些条件算出后自动保存。
在views.py
里面怎么将virtual_name
virtual_ip
,回填到virtual_form
里,否在在下面的校验无法通过。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.