ModelForm
为了简单我们今天不撩妹,专聊一个神奇的宝贝组件modelform,看到这个单词我们就明白这个组件就是把model和form组合起来,大家记住了!
就比如我们在使用的数据库中建立了一个客户表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册,老婆姓名(这是老王最爱的)等一大推消息,创建思路如下:
1.我们在html文件里使用form表单罗列这些字段,让用户自己填写,
2.只要使用了ModelForm就绕开了form的复杂性.直接来干就行,他早就在内部为我们生成好了
使用:
1.首先在py文件中导入ModelForm
from django.forms import ModelForm
在视图函数类定义一个类,记住一定要继承ModelForm,在这个类中在写另一个原类Meta(规定的 注意首字母大写)
class CustomerModelForm(forms.ModelForm):
class Meta:
model=models.Customer
fields='__all__'
exclude=['delete_status']
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
for name, field in self.fields.items():
if name=='course':
continue
field.widget.attrs.update({'class':'form-control'})
Model.py
class Customer(models.Model):
'''
客户表(最开始大家都是客户,销售就是不停的撩你,你还没有交钱上床就是客户)
'''
qq = models.CharField(verbose_name='QQ',max_length=64,unique=True,help_text='QQ号必须唯一')
qq_name=models.CharField('QQ昵称',max_length=64,blank=True,null=True)
name=models.CharField('姓名',max_length=32,help_text='学员报名后请改成真实姓名')# #可为空,有些人就不愿意给自己的真实姓名
sex_type=(('male','男'),('female','女'))
sex=models.CharField('性别',choices=sex_type,max_length=16,default='male',blank=True,null=True)#存的是male或者female,字符串
birthday = models.DateField('出生日期', default=None, help_text="格式yyyy-mm-dd", blank=True, null=True)
phone = models.BigIntegerField('手机号', blank=True, null=True) # 手机号改成字符串的,不然不好搜索
source = models.CharField('客户来源', max_length=64, choices=source_type, default='qq')
introduce_from = models.ForeignKey('self', verbose_name="转介绍自学员", blank=True, null=True,
on_delete=models.CASCADE) # self指的就是自己这个表,和下面写法是一样的效果,自关联
course = MultiSelectField("咨询课程", choices=course_choices) # 多选,并且存成一个列表的格式,通过modelform来用的时候,会成为一个多选框
class_type = models.CharField("班级类型", max_length=64, choices=class_type_choices, default='fulltime')
date = models.DateTimeField("咨询日期", auto_now_add=True) # 这个没啥用昂,我问销售,销售说是为了一周年的时候给客户发一个祝福信息啥的
last_consult_date = models.DateField("最后跟进日期", auto_now_add=True) # 考核销售的跟进情况,如果多天没有跟进,会影响销售的绩效等
next_date = models.DateField("预计再次跟进时间", blank=True, null=True) # 销售自己大概记录一下自己下一次会什么时候跟进,也没啥用
consultant = models.ForeignKey('Userinfo', verbose_name="销售", blank=True, null=True, on_delete=models.CASCADE)
ass_list = models.ManyToManyField('ClassList', verbose_name="已报班级", blank=True)
delete_status = models.BooleanField(default=False)
class Meta:
ordering = ['id', ]
verbose_name = '客户信息表'
verbose_name_plural = '客户信息表'
def __str__(self):
return self.name + ":" + self.qq
html
{% extends 'starter.html' %}
{% load mytags %}
{% block title %}
{% if tag == 1%}
公户信息展示
{% else %}
我的客户
{% endif %}
{% endblock %}
{% block content %}
关键字
姓名
go
{% csrf_token %}
{% if tag == 1 %}
公户转私户
{% else %}
私户转公户
{% endif %}
go
{% if tag == 1 %}
{% endif %}
{# #}
#
序号QQ姓名性别客户来源咨询课程状态销售跟进记录操作{% for customer in all_customers %}
{{ request|list_number:forloop.counter }}{{ customer.qq }}{{ customer.name }}{{ customer.get_sex_display }}{{ customer.get_source_display }}{{ customer.get_course_display }}{{ customer.get_status_display }}{{ customer.consultant.username|default:'暂无' }}{% empty %}
sorry,没有查询相关用户信息,请核对后再查!!!!!
{% endfor %}
{% endblock %}