作成・更新・削除

データの作成・更新・削除

DjangoのORMを使用して、データの作成・更新・削除を行うのは簡単に行えます。
データの取得については既に触れましたが、あとは作成と更新、削除を覚えればCRUDの全ての処理をDjangoで行うことができるようになります。
今回もサンプルのmodels.pyを用意します。

models.py


class Article(models.Model):

    title = models.CharField(max_length=100)
    body = models.TextField()
    is_published = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)


class Comment(models.Model):

    article = models.ForeignKey(Article, on_delete=models.CASCADE)
    body = models.TextField()
    created = models.DateTimeField(auto_now_add=True)

データの作成

データを作成するには、そのままclass名を指定して、引数にフィールド名を入れていきます。


article = Article()
article.title = 'テスト'
article.body = 'これはテストです。'
article.is_published = True
article.save()

まずはクラス名を指定して、それぞれフィールドに該当する値を代入していき、最後にsave()をすることでデータの作成が完了します。

Article()の引数に全て・一部指定することも可能です。


article = Article(
    title='テスト', body='これはテストです。', is_published=True
)
article.save()

またsave()ではなくobjects.create()を使用してデータを作成することも可能です。
上記の書き方ではどうしても2行になってしまうので1行に収めたい場合、objects.create()を使うと良いでしょう。

objects.create()


Article.objects.create(
    title='テスト', body='これはテストです。', is_published=True
)

データの更新

データの更新もほぼ作成と同じで簡単に行うことができます。
作成と違って更新の場合には、既に存在するデータを取得します。
そしてフィールドに値を代入していきます。


article = Article.objects.get(id=5)
article.is_published = False
article.save()

こうすることで、データを新しく作成することなく、id=5のArticleを更新することができます。

objects.filter()でデータを取得してデータの更新を行うことも可能です。
この場合は、複数データがある場合は該当する全てのデータが更新されるので注意してください。


Article.objects.filter(id=5).update(is_published=False)

通常データを更新するだけなら、データを取得してsave()を行うより、
データをそのままフィルタリングしてupdate()する上記の例の方が処理は断然に早くなります。
状況に応じて使い分けましょう。

データの削除

データの削除には、delete()を使います。
データが単体であれ、複数のクエリセット であれ最後にdelete()を使うことで該当のデータを削除できます。


# データを取得してから削除
article = Article.objects.get(id=5)
article.delete()

# クエリを飛ばしてそのままデータを削除
Article.objects.filter(id=5).delete()

まずはこれらCRUDの基本を覚えてデータを柔軟に扱えるようになっておきましょう。