from django.db import models
from django import forms
class Category(models.Model):
id = models.AutoField(primary_key=True, db_index=True)
name = models.CharField(blank=True, null=True, max_length=10)
def __str__(self) -> str:
return self.name
class Meta:
managed = False
db_table = 'category'
class Product(models.Model):
id = models.AutoField(primary_key=True, db_index=True)
name = models.CharField(blank=True, null=True, max_length=10)
price = models.IntegerField(blank=True, null=True)
count = models.IntegerField(blank=True, null=True)
# category = models.ForeignKey(Category, on_delete=models.CASCADE)
category = models.ForeignKey(Category, null=True, on_delete=models.SET_NULL)
pic = models.CharField(blank=True, null=True, max_length=10)
sellpoint = models.CharField(blank=True, null=True, max_length=10)
description = models.CharField(blank=True, null=True, max_length=10)
time = models.DateTimeField(blank=True, null=True)
def __str__(self) -> str:
data=self.__dict__
if(len(data.keys())>100):
return super().__str__()
s='{ '
for k,v in data.items():
if k.startswith('_'):continue
s=s+str(k)+" : "+str(v)+' , '
s=s+' }'
return s
class Meta:
managed = False
db_table = 'product'
#app1\views.py
def select(request):
# 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
# products = models.Product.objects.all()
# filter相当于SQL中的WHERE,可设置条件过滤结果
# products = models.Product.objects.filter(id=21)
# <=
# products = models.Product.objects.filter(id__lte=23)
# 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 5;
# products=models.Product.objects.order_by('name')[0:5]
# 数据排序,-id表示id逆序
# products=models.Product.objects.order_by("id")
# 上面的方法可以连锁使用,in list
# products=models.Product.objects.filter(id__in =[21,22,23,666]).order_by("-id")
# print('filter>>', products)
pagesizeS = request.GET.get('pagesize')
pagesize = int(pagesizeS) if pagesizeS else 5
pageS = request.GET.get('page')
page=int(pageS) if pageS else 1
products = models.Product.objects.order_by(
'id')[pagesize*page-pagesize:pagesize*page]
return render(request, "list.html", {'objs': products})
def delete(request, id):
# 删除id=1的数据
# models.Product.objects.get(id=1).delete()
# 另外一种方式
# models.Product.objects.filter(id=1).delete()
# 删除所有数据
# models.Product.objects.all().delete()
#get找不到会报错,filter会返回空`数组`
models.Product.objects.get(id=id).delete()
return redirect("/a1/list")
def addORupdate(request, id):
if request.method == "GET":
if (id == 0):
return render(request, "update.html", {'obj': {'id': id}})
# 获取单个对象
# obj = models.Product.objects.get(id=id)
obj = models.Product.objects.filter(id=id).first()
return render(request, "update.html", {'obj': obj})
# print(request.GET)
# print(id)
myfile = request.FILES.get('pic',None)
try:
filename=utils.upload_file(myfile, settings.MEDIA_ROOT)
except Exception as e:
return HttpResponse(e)
objmap={
'name': request.POST.get('name', 'No Name'),
'price': request.POST.get('price', 250),
'count': request.POST.get('count', 7),
'category_id': request.POST.get('category', 'No category'),
'pic': settings.MEDIA_URL+filename,
'description': request.POST.get('description', 'No Description'),
'time':datetime.now()
}
# print(request.FILES)
print('>>',objmap)
if id==0:
obj=models.Product(**objmap)
obj.save()
else:
models.Product.objects.filter(id=id).update(**objmap)
return redirect("/a1/list")
def update(request):
# 修改其中一个id=21的name字段,再save,相当于SQL中的UPDATE
# obj = models.Product.objects.get(id=21)
# obj.count += 1
# obj.save()
# 另外一种方式
# models.Product.objects.filter(id=25).update(name='Google')
# 修改所有的列
# models.Product.objects.all().update(pic='qq.jpg')
return HttpResponse("<p>修改成功</p>")
#djdemo1\urls.py
urlpatterns = [
path('a1/list', a1v.select),
path('a1/del/<int:id>', a1v.delete),
path('a1/<int:id>/addORupdate', a1v.addORupdate),
path('a1/update', a1v.update),
]
//app1\templates\list.html
{%load static%}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="{% static 'js/bootstrap.min.js' %}"></script>
<style src="{% static 'js/bootstrap.min.css' %}" ref="stylesheet"></style>
<title>Document</title>
</head>
<body>
<table width="100%" border="2px">
<tr>
<th>id</th>
<th>name</th>
<th>count</th>
<th>price</th>
<th>time</th>
<th>category</th>
<th>pic</th>
<th>操作</th>
</tr>
{% for obj in objs %}
<tr>
<td>{{obj.id}}</td>
<td>{{obj.name}}</td>
<td>{{obj.count}}</td>
<td>{{obj.price}}</td>
<td>{{obj.time}}</td>
<td>{{obj.category_id}}:{{obj.category}}</td>
<td><img src='{{obj.pic}}' style="height:100px"></td>
<td><a href="/a1/{{obj.id}}/addORupdate">修改</a><a href="/a1/del/{{obj.id}}">删除</a></td>
</tr>
{%endfor%}
</table>
</body>
</html>
//app1\templates\update.html
{%load static%}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="{% static 'js/bootstrap.min.js' %}"></script>
<style src="{% static 'js/bootstrap.min.css' %}" ref="stylesheet"></style>
<title>Document</title>
</head>
<body>
<form method="post" action="/a1/{{obj.id}}/addORupdate" enctype="multipart/form-data">
{% csrf_token %}
商品名<input name="name" value="{{obj.name}}" /><br>
商品价格<input name="price" value="{{obj.price}}" /><br>
商品数量<input name="count" value="{{obj.count}}" /><br>
商品类别<input name="category" value="{{obj.category_id}}" /><br>
商品图片<input name="pic" type='file' value="{{obj.pic}}"/><br>
<img src="{{obj.pic}}" alt="" style="height: 100px">
时间<input name="time" value="{{obj.time}}" /><br>
<div style="color:red">{{msg}}</div>
<button type="submit">提交</button>
</form>
</body>
</html>
版权声明:本文为weixin_43292547原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。