您的位置:首页 > 编程语言 > Go语言

Django框架学习笔记(26.ModelForm操作)

2017-12-22 20:49 609 查看
先回忆下以前的操作:

创建Django以及app01配置相关,

urls.py:

url(r'^index/', views.index)


models.py:

from django.db import models

class UserType(models.Model):
caption = models.CharField(max_length=32)

class UserInfo(models.Model):
username = models.CharField(max_length=32)
email = models.EmailField()
user_type = models.ForeignKey(to='UserType', to_field='id', on_delete=models.CASCADE)


views.py:

from django.shortcuts import render
from django import forms
from django.forms import fields
from app01 import models

class UserInfoForm(forms.Form):
username = fields.CharField(max_length=32)
email = fields.EmailField()
user_type = fields.ChoiceField(
choices=models.UserType.objects.values_list('id', 'caption')
)

def __init__(self, *args, **kwargs):
super(UserInfoForm, self).__init__(*args, **kwargs)
self.fields['user_type'].choices = models.UserType.objects.values_list('id', 'caption')

def index(request):
if request.method == "GET":
obj = UserInfoForm()
return render(request, 'index.html', {'obj': obj})
elif request.method == "POST":
obj = UserInfoForm(request.POST)
obj.is_valid()
models.UserInfo.objects.create(**obj.cleaned_data)
models.UserInfo.objects.filter(id=1).update(**obj.cleaned_data)
return render(request, 'index.html', {'obj': obj})


index.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/index/" method="POST">
{% csrf_token %}
{{ obj.as_p }}
<input type="submit" value="提交"/>
</form>
</body>
</html>


下面是ModelForm操作:

urls.py:

url(r'^index/', views.index),
url(r'^user_list/', views.user_list),
url(r'^edit-(\d+)/', views.user_edit),


models.py:

from django.db import models

class UserType(models.Model):
caption = models.CharField(max_length=32)

class UserGroup(models.Model):
name = models.CharField(max_length=32)

class UserInfo(models.Model):
username = models.CharField(max_length=32)
email = models.EmailField()
user_type = models.ForeignKey(to='UserType', to_field='id', on_delete=models.CASCADE)
u2g = models.ManyToManyField(UserGroup)
#强大之处在于:多对多也适用


views.py:

from django.shortcuts import render
from django import forms
from app01 import models
from django.forms import widgets as Fwidgets
from django.forms import fields as Ffields

class UserInfoModelForm(forms.ModelForm):

id_rmb = Ffields.CharField(
widget=Fwidgets.CheckboxInput(),
label="一个月内免登录"
)

class Meta:
model = models.UserInfo
fields = '__all__'
labels = {
'username': '用户名',
'email': '邮箱',
}
help_texts = {
'username': '...',
}
widgets = {
#'username': Fwidgets.PasswordInput(attrs={'class': 'c1'})
}
error_messages = {
'email': {
'required': '邮箱不能为空',
'invalid': '邮箱格式错误',
}
}
field_classes = {
#'email': Ffields.URLField
}

def clean_username(self):
old = self.cleaned_data['username']
return old

def index(request):
if request.method == "GET":
obj = UserInfoModelForm()
return render(request, 'index.html', {'obj': obj})
elif request.method == "POST":
obj = UserInfoModelForm(request.POST)
if obj.is_valid():
obj.save()
return render(request, 'index.html', {'obj': obj})

def user_list(request):
li = models.UserInfo.objects.all().select_related('user_type')
return render(request, 'user_list.html', {'li': li})

def user_edit(request, nid):
if request.method == "GET":
user_obj = models.UserInfo.objects.filter(id=nid).first()
mf = UserInfoModelForm(instance=user_obj)
return render(request, 'user_edit.html', {'mf': mf, 'nid': nid})
elif request.method == "POST":
user_obj = models.UserInfo.objects.filter(id=nid).first()
mf = UserInfoModelForm(request.POST, instance=user_obj)
if mf.is_valid():
mf.save()
else:
pass
return render(request, 'user_edit.html', {'mf': mf, 'nid': nid})


user_list.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{% for row in li %}
<li>{{ row.username }}-{{ row.user_type.caption }}-<a href="/edit-{{ row.id }}/">编辑</a></li>
{% endfor %}
</ul>
</body>
</html>


user_edit.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/edit-{{ nid }}/" method="POST">
{% csrf_token %}
{{ mf.as_p }}
<input type="submit" value="修改"/>
</form>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: