個人的に Blog 投稿を誤って管理者で投稿してしまうことが時々あります。
投稿者を変更したいのですが、Mezzanine は画面から投稿者の変更できず、毎回 Blog 投稿を削除して、再投稿を行なっていました。
このオペレーションは数が多いとたいへんなので、変更する方法があるのか調べてみました。
調べた結果を記載します。
環境情報
-
OS
CentOS release 6.7 (Final) -
Python Version
Python 2.7.8 -
Package (必要そうなものだけ抜粋)
Django (1.9.6)
Mezzanine (4.1.0)
著者を変更する機能は存在するか ?
Forum に問い合わせがありますが、直接 DB 更新しないと出来ない旨の回答があります。1
ADMIN で編集画面を作るということもできますが、そこまで必要性は感じないので、DB 直接更新 で変更してみます。
DB 直接更新
DB の更新方法として、Model 経由で更新する、直接 SQL を発行する方法があります。
それぞれ試してみました。
更新方法1. Django shell で変更
-
django shell を起動
python manage.py shell
-
BlogPost をタイトルで検索、user_id を変更して save
from mezzanine.blog.models import BlogPost b = BlogPost.objects.get(title=${title}) b.user_id = ${user_id} b.save()
更新方法2. DB 直接接続して Update 文を実行する
dbshell コマンドで、settings.py の情報で DB 接続ができます。
dhshell コマンドで、接続後に Update 文 を流します。
-
DB接続
python manage.py dbshell
-
Blog の ID を特定する
SELECT blogpost.id, blogpost.user_id, auth_user.username FROM blog_blogpost AS blogpost, auth_user AS auth_user WHERE blogpost.user_id = auth_user.id AND auth_user.username = '${updated_user_name}';
-
更新先の User ID を確認する どのID に更新すれば良いか確認します。
SELECT auth_user.id, auth_user.username FROM auth_user AS auth_user;
-
更新 SQL 発行 する 更新 SQLを実行します。
UPDATE BLOG_BLOGPOST SET USER_ID = ${update_user_id} WHERE ID = ${BLOG_BLOGPOST.id};
画面で確認すると、著者が変わっているかと思います。
以上です。
-
補足 2014年の問い合わせですが、2017年12月時点でも機能はありません。 ↩
コメント