1.定义forms.py文件
forms.py文件中主要编写的就是页面表单,通过调用forms的不同方法来生成不同的input标签
from django import forms
from student.models import student
class MyDateInput(forms.DateInput): #这里主要是为了使用input标签其中的date,自己手动编写的type
input_type = 'date'
class ConcatForm(forms.Form):
tel = forms.CharField(label="电话",max_length=20)
qq = forms.CharField(label="QQ号",max_length=50)
email = forms.EmailField(label="邮箱")
isWai = forms.BooleanField(label="外籍",initial=True) # 默认复选框
rolename = forms.ChoiceField(choices=(("政治家","政治家"),("群众","群众")),widget=forms.RadioSelect,label="政治面貌")
aihao = forms.ChoiceField(label="爱好",choices=(("体育","体育"),("音乐","音乐"),("美术","美术"),("游戏","游戏")),widget=forms.CheckboxSelectMultiple)
city = forms.ChoiceField(label="城市",choices=(("北京","北京"),("纽约","纽约")))
createDate = forms.DateField(label="注册时间",widget=MyDateInput)
img = forms.FileField(label="头像")
class StudentForm(forms.ModelForm):
SEX_CHOICES = (
('男','男'),
('女','女'),
)
LIKES_CHOICES = (
("体育", "体育"),
("音乐", "音乐"),
("美术", "美术"),
("游戏", "游戏"),
)
name = forms.CharField(label="姓名")
sex = forms.ChoiceField(label="性别",choices=SEX_CHOICES,widget=forms.RadioSelect)
likes = forms.MultipleChoiceField(label="爱好",choices=LIKES_CHOICES,widget=forms.CheckboxSelectMultiple)
imgPath = forms.FileField(label="头像")
class Meta:
model = student
fields = '__all__'
2.编写view.py文件
这样就完成了对于forms中代码的编写,接下来需要在view.py文件中,将这里的东西已值的方式传入页面中,然后就可以使用了。
def addStudent2(request):
if request.method == "GET" :
form = StudentForm
grades=Grade.objects.all()
return render(request,"addStudent2.html",{"form":form})
else:
stu = Student()
form = StudentForm(request.POST,request.FILES,instance=stu)
if form.is_valid():
form.save()
print(stu.imgPath)
return redirect(reverse("showStudent", args=[stu.id]))
else:
return render(request, "addStudent2.html", {"form": form})
is_valid()方法就是验证表单是否合法,.save()方法可以直接把数据保存到数据库。
这样就完成了反向生成页面表单的步骤。
3.文件上传
文件上传:
form.FileField() 手动处理
model.FileField(upload_to) 这个用在自动保存上传文件
上传时ModelForm中必须传入request.FILES
上传路径的设置
MEDIA_ROOT = os.path.join(BASE_DIR,"upload")
MEDIA_URL = '/upload/'
配置urls.py文件
urlpatterns = [
url(r'^admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
将文件表单后加上
ENCTYPE="multipart/form-data"
将model.py文件中文件的代码改为
imgPath = models.FileField(verbose_name='头像', null=True, upload_to='student')
之后就可以进行文件上传了