djangoのOneToOneFieldでテーブルを作ってみる
djangoのOneToOneFieldでテーブルを作ってみる
ツイッター自動化アプリをコツコツ作成しております。
前回までの記事「djangoでツイートを検索して結果を表示してみた」「pythonでtwitterAPIを叩いてダイレクトメッセージを送る」を組み合わせて該当するユーザーのみにダイレクトメッセージを送れるようにしました。ただこのアプリのユーザーは同じツイッターのアカウントを使用するわけではないので、アクセスキーやトークンは個人で用意してもらわなければなりません。今回は「UserInfo」というテーブルを用意して前述の情報を保持するようにしたいと思います。この「UserInfo」と言うテーブルは「UserModel」を拡張するような形になるので「1対1」の関係になります。互いに重複して参照するレコードが無い状態です。
関係性はざっくり下の感じかと思われます。
OneToOne:「生徒の基本情報テーブル」対「生徒の家族情報テーブル」
ForeignKey:「生徒の基本情報テーブル」対「(生徒の)出身地情報テーブル」
ManyToManyもありますがそれは後日にいたします。
それではテーブルを作成していこうと思います。
models.py
OneToOneのテーブルを作成する場合「models.OneToOneField」と記載します。
AUTH_USER_MODELと紐づけるので「settings」をインポートするのも忘れないようにしましょう。
from django.conf import settings
from django.db import models
class UserInfo(models.Model):
class Meta:
verbose_name_plural = 'UserInfo'
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
consumer_key = models.CharField(max_length=255, blank=True, null=True)
consumer_secret = models.CharField(max_length=255, blank=True, null=True)
access_token = models.CharField(max_length=255, blank=True, null=True)
access_secret = models.CharField(max_length=255, blank=True, null=True)
message = models.TextField(max_length=1000, blank=True, null=True)
count_send_message = models.PositiveIntegerField(default=0, blank=True, null=True)
count_send_message_in_a_day = models.PositiveIntegerField(default=0, blank=True, null=True)
count_search_tweet = models.PositiveIntegerField(default=0, blank=True, null=True)
count_search_tweet_in_a_day = models.PositiveIntegerField(default=0, blank=True, null=True)
limit_send_message = models.PositiveIntegerField(default=0, blank=True, null=True)
limit_send_message_in_a_day = models.PositiveIntegerField(default=0, blank=True, null=True)
def __str__(self):
return str(self.user)
参考:Django str returned non-string (type NoneType)
admin.py
管理画面でも確認できるようにしてあげましょう。
from django.contrib import admin
from .models import UserInfo
admin.site.register(UserInfo)
テーブル確認
テーブルを確認してみます。
紐づきのキー「user_id」が入っているのが確認できますね。
MariaDB [django]> show columns from twitter_userinfo;
+-----------------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------------+------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| customer_key | varchar(255) | YES | | NULL | |
| customer_secret | varchar(255) | YES | | NULL | |
| access_token | varchar(255) | YES | | NULL | |
| access_secret | varchar(255) | YES | | NULL | |
| message | longtext | YES | | NULL | |
| count_send_message | int(10) unsigned | YES | | NULL | |
| count_send_message_in_a_day | int(10) unsigned | YES | | NULL | |
| count_search_tweet | int(10) unsigned | YES | | NULL | |
| count_search_tweet_in_a_day | int(10) unsigned | YES | | NULL | |
| limit_send_message | int(10) unsigned | YES | | NULL | |
| limit_send_message_in_a_day | int(10) unsigned | YES | | NULL | |
| user_id | int(11) | NO | UNI | NULL | |
+-----------------------------+------------------+------+-----+---------+----------------+
ディスカッション
コメント一覧
まだ、コメントがありません