個人的に Blog 投稿を誤って管理者で投稿してしまうことが時々あります。
投稿者を変更したいのですが、Mezzanine は画面から投稿者の変更できず、毎回 Blog 投稿を削除して、再投稿を行なっていました。
このオペレーションは数が多いとたいへんなので、変更する方法があるのか調べてみました。

調べた結果を記載します。

[TOC]


環境情報

  • 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};
    

画面で確認すると、著者が変わっているかと思います。
以上です。


  1. 補足 2014年の問い合わせですが、2017年12月時点でも機能はありません。 

コメント