概要
company_code
と言うオブジェクトをCompanyCode
と言うモデル名にする(スネークケースをキャメルケースにする)方法を2つ紹介します。また単にモデル名を生成するだけではなく、モデルクラスにアクセスする方法も記載します。
サンプルコード解説
-
str.title()
メソッドを使用する方法 -
capitalize()
メソッドを使用する方法
str.title()
メソッドを使用する方法
object_name = 'company_code'
def get_model_from_object_name(object_name):
model_name = object_name.title().replace('_', '')
return model_name
model = get_model_from_object_name(object_name)
print(model)
# 出力結果
# CompanyCode
str.title()
メソッドは、文字列内の単語の先頭文字を大文字に変換するメソッド。その後、replace
で_
を取り除くという方法です。
str.title()
メソッドは、スペースやアンダースコアが単語の区切りと判断されます。それ以外にもハイフン、ピリオド、スラッシュなども認識されます。
capitalize()
メソッドを使用する方法
object_name = 'company_code'
def get_model_from_object_name(object_name):
model_name = ''.join(word.capitalize() for word in object_name.split('_'))
return model_name
model = get_model_from_object_name(object_name)
print(model)
# 出力結果
# CompanyCode
capitalize()
メソッドは、文字列内の最初の文字を大文字に変換するメソッド。
split('_')
によって文字列がアンダースコアで分割され、各単語がリストとして取得された後、for
ループでリスト内の各単語をキャピタライズし、join()
メソッドで結合する、という方法です。
モデルクラスを取得したい場合
文字列として与えられたモデル名をもとに、対応するモデルクラスを取得したい場合は、関数の返り値をreturn globals()[model_name]
とします。これにより、データベース内のモデルとの対応や動的なオブジェクト作成などの処理に利用することができます。
globals()
はグローバルスコープ内の変数やオブジェクトを格納している辞書です。
該当するキーが見つからなかった場合、KeyError
例外が発生します。
取り急ぎローカル環境で触るために使いましたが、グローバルスコープ内の全ての変数を辞書して返すので可読性や保守性に欠ける可能性もあります(というよりあまり推奨されない)。変数をまとめて辞書で管理するとか、引数に渡す関数にするとかした方が良いかもですね。