小村のポートフォリオサイト開発(12) DjangoRestFramework はてなブログの記事 論理削除対応
こんばんは、小村だよ!
下記のポートフォリオサイトを構築していくよ
- サイト:Little Village
前回はてなブログ記事をすべてDBに書き込むことに成功しました
今回は論理削除対応と銘打って進めていきます
目次
- 削除日時を追加
- 削除日時を入れる処理追加
記録
削除日時を追加
自前のDBはバックアップとしての機能も期待しています。
そのため、はてなブログの記事が消えたとしても、削除はしません
そのかわりに、削除されていたら削除日を更新して記事の表示はしないようにします
ではまずmodelに削除日を用意しましょう
追加した後のマイグレーションファイルは下記のようになりました
削除日時を入れる処理追加
参考:(Django, DRF(Django REST Framework)での論理削除)https://qiita.com/t_toriumi/items/19c590ef3cda8438e741
上記サイトが参考になりそうですね!
サイトを参考に下記のように修正しました。
まずは
views
取込処理をしているなかで存在する
hatena_entry_id
を蓄え、最後になければdelete
かけてますここは特に問題ないですね
本題の
models
あらたに
QuerySet
とModelManager
の概念が加わってます。こちら業務で使ってますが詳しくは調べたことないのであとで調べてみますね
動作としては
delete()を実行すると論理削除する
delete_hard()を実行すると物理削除する
Entry.objectsでデータを覗くと論理削除データは省かれる
Entry.entireでデータを覗くと論理削除データも含む
という動きになります。どちゃくそ便利!
動作確認
そしたらはてなブログで記事を消して、ふたたび取り込みます
再取り込み後のデータが下記。ちゃんと削除日時が入ってますね!
DjangoのQuerySet
とModelManager
について
Modelsで出てきた
QuerySet
とModelManager
について調べてみます業務で使ってるのでなんとなくは使えてますが、改めて意味を調べてみます
Manager
今までなんとなしに
Entry.objects.all()
とかでデータを取得できてたのはこのManagerのおかげデフォルトでobjectsにアクセスした際、動くようになっているようですね。
今回のように
entire
の中でManagerを入れると、Entry.entireでアクセスできるようになります。そうしてアクセスした際の動きを、下記のQuerySetなどで制御するようですね。
QuerySet
QuerySetは実際にDBにアクセスせずにデータを加工したりする仕組みのようです。へー!
models.QuerySetが用意されていて、その中に基本のgetやfilterやexcludeなどが用意されてます
そのうえで、今回のような決まりきった削除などの更新処理も定義できるようですね。
DBにアクセスする際の抽出条件や処理条件を定義する役目ということでしょうね。
おわりに
論理削除の処理と合わせて、Djangoの基礎知識についても知れました
上記記事について熟読ができてないので、改めて後で読んでみようと思います。
次は、APIの返り値の設定をしていきたいと思います。
ではでは、ちゃお~~~!