django單表操作 增 刪 改 查


一、實現:增、刪、改、查

1、獲取所有數據顯示在頁面上

model.Classes.object.all(),拿到數據后,渲染給前端;前端通過for循環的方式,取出數據。

目的:通過classes(班級表數據庫)里面的字段拿到對應的數據。

 

2、添加功能

配置url分發路由增加一個add_classes.html頁面

寫一個def add_classess函數

在前端寫一個a標簽,前端頁面就可以看到一個添加鏈接,通過點這個a標簽的鏈接跳轉到一個新的add_classess頁面

add_classess.html 頁面中實現兩個功能:

form表單 :返回給add_classess.html頁面

input  輸入框

input  提交按鈕

接下來就要接收前端輸入的數據:

if  request.mothod='GET'

elif

 request.mothod='POST'

request.POST.get('title')  拿到傳過來的班級數據

然后通過創建的方式,寫入對應的title字段數據庫中

方法:models.Classes.objects.create(titile=title)

再返回給return redirect('/get_classes.html')

 

3、刪除功能

配置url路由分發

加一個操作:

<th>操作</th>

一個a標簽:

<a href="/del_classes.html?nid={{ row.id }}">刪除</a>

實現刪除操作,就是找到數據庫中,對應的id字段(賦值給nid=id),刪除掉這個ID字段這行數據,就實現了刪除功能。

 

4、實現編輯功能

在get_classes.html里添加一個a標簽

配置路由分發

寫def edit_classes函數

班級這個輸入框前面id不顯示,因為id不能被用戶修改,所以要隱藏。

根據id拿到這個對象(id 走get方法),id存放在請求頭中發送過去的。

obj對象里面包含id 和 title ,走post方法,title是放在請求體中發送過去的

第一次:get拿到id

    if request.method == 'GET':
        nid = request.GET.get('nid')
        obj = models.Classes.objects.filter(id=nid).first()
        return render(request, 'edit_classes.html', {'obj': obj})

第二次:post拿到id和title

    elif request.method == 'POST':
        nid = request.GET.get('nid')
        title = request.POST.get('title')
        models.Classes.objects.filter(id=nid).update(titile=title)
        return redirect('/get_classes.html')

 

綜合應用示例:

models.py

from django.db import models

# Create your models here.

class Classes(models.Model):
    """
    班級表,男
    """
    titile = models.CharField(max_length=32)
    m = models.ManyToManyField("Teachers")

class Teachers(models.Model):
    """
    老師表,女
    """
    name = models.CharField (max_length=32)

"""
cid_id  tid_id
 1    1
 1    2
 6    1
 1000  1000
"""
# class C2T(models.Model):
#     cid = models.ForeignKey(Classes)
#     tid = models.ForeignKey(Teachers)

class Student(models.Model):
    username = models.CharField(max_length=32)
    age = models.IntegerField()
    gender = models.BooleanField()
    cs = models.ForeignKey(Classes)

urls.py

"""django_one URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app01.views import classes

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^get_classes.html$', classes.get_classes),
    url(r'^add_classes.html$', classes.add_classes),
    url(r'^del_classes.html$', classes.del_classes),
    url(r'^edit_classes.html$', classes.edit_classes),

]

classes.py

from django.shortcuts import render
from django.shortcuts import redirect
from app01 import models


def get_classes(request):
    cls_list = models.Classes.objects.all()
    return render(request, 'get_classes.html', {'cls_list': cls_list})


def add_classes(request):
    if request.method == "GET":
        return render(request, 'add_classes.html')
    elif request.method == 'POST':
        title = request.POST.get('titile')
        models.Classes.objects.create(titile=title)
        return redirect('/get_classes.html')


def del_classes(request):
    nid = request.GET.get('nid')
    models.Classes.objects.filter(id=nid).delete()
    return redirect('/get_classes.html')


def edit_classes(request):
    if request.method == 'GET':
        nid = request.GET.get('nid')
        obj = models.Classes.objects.filter(id=nid).first()
        return render(request, 'edit_classes.html', {'obj': obj})
    elif request.method == 'POST':
        nid = request.GET.get('nid')
        title = request.POST.get('title')
        models.Classes.objects.filter(id=nid).update(titile=title)
        return redirect('/get_classes.html')

get_classes.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <a href="/add_classes.html">添加</a>
</div>
<div>
    <table border="1">
        <thead>
        <tr>
            <th>ID</th>
            <th>名稱</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        {% for row in cls_list %}
            <tr>
                <td>{{ row.id }}</td>
                <td>{{ row.titile }}</td>
                <td>
                    <a href="/del_classes.html?nid={{ row.id }}">刪除</a>
                    |
                    <a href="/edit_classes.html?nid={{ row.id }}">編輯</a>
                </td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
</div>
</body>
</html>

add_classes.html

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

edit_classes.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
    <form action="/edit_classes.html?nid={{ obj.id }}" method="POST">
        {% csrf_token %}
    <input type="text" name="title" value="{{ obj.titile }}" />
    <input type="submit" value="提交"/>
</form>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM