django增删改查

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版权协议,转载请附上原文出处链接和本声明。