Django CRUD

急需一个会DJango的伙伴协助完成一个简单的CRUD,现在卡在如何修改数据库内容!可以援助的请私信!

目的是点击黄色的edit以后,可以更改moody box这个名字。

img


但是,现在除了以下的error, 我的urls 也不对,我无法修改database中要想修改的东西

error

img

model

img

views

img

urls

img

img

template

{% extends "base.html" %}
{% load crispy_forms_tags %}
{% load static %}

{% block content %}
<!--Main Navigation-->
<header>

    {% include 'mood/nav.html' %}

    <!-- Background image -->
    <div id="intro" class="p-5 text-center bg-image shadow-1-strong ">
        <div class="mask bg-color ">
            <div class="d-flex justify-content-center align-items-center h-100">
                <div class="px-4 bg-light bg-gradient text-black-50">

                    <div class="my-4"></div>

                    <h4 class="border border-light my-4 p-4">
                        <span class="text-warning">{{ profile.name }}</span> 
                        Profile
                    </h4>

                    <form 
                        action="{% url 'edit_profile' user %}"
                        method="POST" 
                        enctype="multipart/form-data"
                        class="my-4 p-4"
                    >
                        {% csrf_token %}
                        

                        <table class="table align-middle mb-0 bg-white">
                            <tbody>
                                <tr>

                                    <!-- Name -->
                                    <th>Name</th>
                                    <td>
                                        <p class="fw-normal mb-1">{{ profile.name }}</p>
                                    </td>

                                    <!-- Action -->
                                    <td>
                                        <button type="button" class="btn btn-warning btn-sm btn-rounded">
                                            <a href="{% url 'edit_profile' user %}">Edit</a>
                                        </button>
                                    </td>
                                    
                                    <td>
                                        <!-- Button trigger modal -->
                                        <button 
                                            type="button" 
                                            class="btn btn-link btn-sm btn-rounded"
                                            data-mdb-toggle="modal" 
                                            data-mdb-target="#exampleModal"
                                        >
                                            Edit
                                        </button>
                                    
                                      
                                        <!-- Modal -->
                                        <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
                                            <div class="modal-dialog">
                                            <div class="modal-content">
                                    
                                                <div class="modal-header">
                                                    <h5 class="modal-title" id="exampleModalLabel">Edit Profile</h5>
                                                    <button type="button" class="btn-close" data-mdb-dismiss="modal" aria-label="Close"></button>
                                                </div>
                                    
                                                <div class="modal-body">
                                                    <div class="col-12">
                                                       name: {{ form.as_p}}
                                              
                                                    </div>
                                                </div>
                                    
                                                <div class="modal-footer">
                                                    <button type="button" class="btn btn-secondary" data-mdb-dismiss="modal">Close</button>
                                                    <button type="submit" class="btn btn-primary">Save changes</button>
                                                </div>
                                            </div>
                                            </div>
                                        </div>
                                    
                                    </td>
                                </tr>

                            </tbody>
                        </table>

                    </form>
                                    
                    
                    <div class="my-4"></div>
                    
                </div>
            </div>
        </div>
    </div>
    <!-- Background image -->
    
</header>

<hr class="m-0" />

{% include 'mood/footer.html' %}

{% endblock %}



详细讲讲

描述具体的呀,要完成是没有的CRUD

Django 有自己的ORM,可以直接利用ORM来完成常见的数据库操作,太复杂的语句从设计上应该避免,无法避免的ORM也支持原生sql语句。

  • 这篇博客: Django入门中的         3. 模型中的CRUD 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •                 1. 通过ORM向DB中增加数据: Entry.objects.create(属性=值,属性=值)

    1. create创建
    Author.objects.create(name='zsf',age=85)
    
    2、创建一个 Models 对象,通过对象的 save() 完成增加
    obj = Author(names='laoshe',age=65)
    obj.save()
    
    3、使用字典构建对象,通过 save() 完成增加
    dic = {
        '属性1':'值1',
        '属性2':'值2',
    }
    obj = Entry(**dic)
    obj.save()

                    2. 查询操作(重难点)        

                            通过Entry.objects调用查询接口

                            1. 基本查询操作  all()

                                用法: Entry.objects.all()

                                返回: QuerySet

                            2. 查询指定列 values('列1','列2',……)

                                用法: Entry.objects.values('列1','列2',……)

                                返回: QuerySet

                                ex: Entry.objects.all().values('names', 'age')

                            3. 根据条件查询部分行数据  Entry.objects.filter(参数)

                                1. 使用Entry属性作为查询参数

                                    多个参数的话使用','隔开,映射到sql语句上,是使用and来进行关联的

                                    ex: Author.objects.filter(id=1,name='莫言') ==  

                                            select * from Author where id =1 and name ='莫言'

                                2. 通过Field Lookup(查询表达式)完成复杂条件构建

                                    查询表达式: 每个查询表达式都是一个独立的查询条件,可以用在所有的有查询条件的位置处

                                    1. __exact   作用: 精确查询,等值判断

                                        用法: Entry.objects.filter(属性__exact=值)

                                        ex:  Author.objects.filter(id__exact=1) == select * from Author where id = 1

                                    2. __contains作用: 筛选出属性中包含指定关键字的记录(模糊查询)

                                        ex:

                                            Author.objects.filter(names__contains = 'ao')

                                            select * from Author where names like '%ao%'

                                    3. __lt 作用:筛选出属性值小于指定值的记录

                                    4. __lte 作用:筛选出属性值小于等于指定值的记录

                                    5. __gt, __gte

                                    6. __startswith, __endwith

                                3. 查询值返回一条数据get(条件)

                                    用法: Entry.objects.get(查询条件/表达式)

                                    注意: 该函数值适用于返回一条记录时使用

                    3. 修改数据

                        1. 通过get()得到要修改的实体对象

                        2. 通过实体对象属性修改属性值

                        3. 再通过实体对象的save()保存回数据库

                    4. 删除数据 调用实体对象/查询结果集的delete()即可

                            1. 删除单个对象 Author.objects.get(id=1).delete()

                            2. 删除多个对象 Author.objects.all().delete()

                    5. F()操作  在执行操作中,获取某列的值时使用

    F('列名')
    from django.db.models import F
    Author.objects.all().update(age=F('age') + 10)

                    6. Q()操作  在查询条件中,可以完成或(or)的操作.如果只是为了完成and操作的话,那么直接filter逗号隔开就行

    from django.db.models import Q
    # Q(表达式) | Q(表达式)
    # ex: 查询Author实体中,id为6或者大于等于70的人的信息
    Author.objects.filter(Q(id=6)|Q(age__gte=70))
    # 等效于 select * from index_author where id=6 or age>=70

                    7. 原生的数据库操作方法

    1. 查询 函数:raw(sql)
       语法:Entry.objects.raw(sql)
    2. 增删改
        with connection.cursor() as cursor:
            sql = 'delete from author'
            cursor.execute(sql)
            return HttpResponse('……')/return HttpResponseRedirect('……')