こんにちは。
Djangoのmodel作成について詰まっていることがあり、質問しています。
前提・実現したいこと
生年月日のモデルをDateFieldで作成しており、
そこに対して、python manage.py shellより、データを入力しようとしています。
生年月日は「19820801」の8桁で入力できるように想定しています。
発生している問題・エラーメッセージ
TypeError: __str__ returned non-string (type datetime.date)
該当のソースコード
社員番号のモデルと、生年月日のモデルを作成しております。
また、社員番号を主キーとし、生年月日を紐づけています。
python
1class E_id(models.Model): 2 3 no = models.CharField( 4 max_length=4, 5 primary_key=True, 6 verbose_name="社員番号", 7 ) 8 9 def __str__(self): 10 return self.no 11 12 class Meta: 13 14 verbose_name_plural = "社員番号" 15 16 17 18 19class Birthday(models.Model): 20 21 b_day = models.DateField( 22 auto_now=False, 23 auto_now_add=False, 24 verbose_name="誕生日", 25 ) 26 27 no = models.ForeignKey( 28 E_id, 29 on_delete=models.CASCADE, 30 verbose_name="社員番号", 31 ) 32 33 def __str__(self): 34 return self.b_day 35 36 class Meta: 37 38 verbose_name_plural = "生年月日" 39
試したこと
エラー文から判断するに、modelの書き方が悪いところまでは突き止めたのですが、
そこからどのように変更すればいいのか、調べてもわかりませんでした。
該当箇所は、
python
1class Birthday(models.Model): 2 # ~省略~ 3 def __str__(self): 4 return self.b_day
ここのreturnより後の記載だと考えています。
ここでself.b_dayとすることで、文字列として返されており、
「文字列でなく、Datetime型だよ」のようなエラー文になっているのかな?と思っています。
補足情報(FW/ツールのバージョンなど)
Django 3.1.7
Python 3.9.1
SQLite
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。