Django 入門チュートリアル - ORM の追加、削除、変更操作

必要なときにデータをクエリできるように、モデルを構築してデータを保存します。Django は、すべてのモデルに完全で便利で効率的な API を自動的に提供します。

以前に作成したモデルと組み合わせると、models.py コードは次のようになります。

from django.db import models
from django.contrib.auth.models import User

class Category(models.Model):
    name = models.CharField('分类',max_length=100)
    class Meta:
        verbose_name = '分类'verbose_name_plural = verbose_name
    def __str__(self):
        return self.name
        
class Tags(models.Model):
    name = models.CharField('标签',max_length=100)
    class Meta:
        verbose_name = '标签'verbose_name_plural = verbose_name
    def __str__(self):
        return self.name
        
class Article(models.Model):
    title = models.CharField('标题',max_length=70)
    intro = models.TextField('摘要', max_length=200, blank=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='分类', default='1')
    tags = models.ManyToManyField(Tags, blank=True, verbose_name='标签')
    body = models.TextField()
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
    created_time = models.DateTimeField('发布时间',auto_now_add=True)
    class Meta:
        verbose_name = '文章'verbose_name_plural = verbose_name
    def __str__(self):
        return self.title

1. 基本的な準備

設定URL

mysite/urls.py

from blog import views              #新增
urlpatterns = [
    path('admin/', admin.site.urls),
    path('orm/', views.orm),          #新增
]

URLに対応した閲覧機能を追加

blog/views.py
from django.shortcuts import render, HttpResponse
from blog import models

def orm(requst):

    return HttpResponse('orm')

ブラウザでhttp://127.0.0.1:8000/orm/にアクセスします。orm view関数にデータ操作メソッド(クエリ文)を記述し、URL経由でview関数をトリガーし、Pycharmのターミナルで出力されたログを確認してクエリの効果を検証するのが目的です。

2. データを増やす

blog/views.py

from django.shortcuts import render, HttpResponse
from blog import models

def orm(requst):
    #增加一篇文章
    models.Article.objects.create(title='增加标题一', category_id=3, body='增加内容一', user_id=1)
    
    return HttpResponse('orm')

操作前、データベース内の記事の内容は次のとおりです。

ブラウザでhttp://127.0.0.1:8000/orm/にアクセスすると、表示機能がトリガーされます。次に、データベースを更新して効果を確認します。

記事がデータベースに追加されました。これは、記事を追加する以前の操作が成功したことを示しています。

データ拡張には 3 つの方法があります。

 
 

2 番目と 3 番目の方法を使用してデータを増やします。ページを更新すると、データベースの効果は次のようになります。

from django.shortcuts import render, HttpResponse
from blog import models  # 导入数据库操作模块

def orm(requst):
    # 第一种方法:
    # models.Article.objects.create(title='增加标题一', category_id=3, body='增加内容一', user_id=1)
    # 第二种方法:添加数据,实例化表类,在实例化里传参为字段和值
    obj = models.Article(title='增加标题二', category_id=4, body='增加内容二', user_id=1)
    # 写入数据库
    obj.save()
    # 第三种方法:将要写入的数据组合成字典,键为字段值为数据
    dic = {'title': '增加标题三', 'category_id': '4', 'body': '增加内容三', 'user_id': '1'}
    # 添加到数据库,注意字典变量名称一定要加**
    models.Article.objects.create(**dic)
    
    return HttpResponse('orm')


2 つのデータがデータベースに追加されたことがわかります。

厳密に言えば、データを追加する方法は create( ) メソッドと save( ) メソッドの 2 つだけです。通常は 3 番目の方法を使用することをお勧めします。

例: ユーザーを作成するためにユーザーが送信したデータを取得します。

#hmtl
<form action="/useradd/" method="post">
    <p>用户名:{
   
   { obj.username }}</p>
    <p>密码:{
   
   { obj.password }}</p>
    <input type="submit" value="submit"/>
</form>
 
#views
def useradd(request):
    obj = AccountForm.UserAdd(request.POST)
    if request.method == 'POST':
        if obj.is_valid():
            user_input = obj.clean()
            print user_input
            #这里直接通过**加上用户的输入即可,因为用户的输入时字典类型的
            models.UserInfo.objects.create(**user_input)
            print models.UserInfo.objects.all()
            return render(request,'account/useradd.html',{'obj':obj})
    return render(request,'account/useradd.html',{'obj':obj})
 
#结果
    --用户输入
        {'username': 'dashuaige', 'password': '123123'}
    --print models.UserInfo.objects.all() 返回值
    #注这里我们是通过__unicode__方法进行输出了否则是对象!
        [<UserInfo: sunqihu>, <UserInfo: alex>, <UserInfo: wutenglan>, <UserInfo: dashuaige>]

3. データの削除 delete()

from django.shortcuts import render, HttpResponse
from blog import models
def orm(requst):
    #删除id=6的文章(数据)
    title = models.Article.objects.filter(id=6).delete()
    return HttpResponse('orm')

削除する前に:

削除後:

ID6の記事は削除されました。

4 番目に、データ更新を変更します (フィールド = 値)

from django.shortcuts import render, HttpResponse
from blog import models

def orm(requst):
    #把标题'增加标题二',修改成'我被修改了'。将指定条件的数据更新,支持 **kwargs,支持字典。
    title = models.Article.objects.filter(title='增加标题二').update(title='我被修改了')
    return HttpResponse('orm')

修正する前に:

変更後:

無事に改造されました!

おすすめ

転載: blog.csdn.net/weixin_47649808/article/details/126367819