utamaro’s blog

誰かの役に立つ情報を発信するブログ

Djangoのモデルに定義していないフィールドを追加する方法

こんな感じのModelを定義しているときに、追加でフィールドを入れたくなったときがありました。

class Sample(models.Model):
    uuid = models.UUIDField(unique=True)
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'sample'

いれたフィールドをtemplateで使用して画面に表示するといった具合で使いました。

↓のコードで対応することができました。

model.__setattr__('icon', 'icon/' + sample.author.username)

iconを表示する際にusernameの前にフォルダ名が必要だったのです。

ですが、Djangoのタグを使っていて文字列の連結ができないし、カスタムタグで拡張することもできない。(少なくとも私には見つけられませんでした。)

最初はmodelはorderdictだからmodel['icon']で対応できると思ったのですが、ダメでした。