Django代码无法存储数据到数据库且抛出TypeError问题求助
解决你的Django TypeError与数据存储问题
嘿,我仔细扒了你的代码,一眼就揪出问题根源——你在models.py里重复定义了Topic和Post模型,这直接导致了TypeError和数据存不进数据库的问题!
问题到底出在哪?
你先写了一个包含subject、board、starter等完整字段的Topic类,结果后面又写了个只带last_updated的Topic类;Post类也是一样,后面重复的版本只有updated_by一个字段。
在Django里,重复定义模型时,后面的会直接覆盖前面的。这就导致你在视图里创建Topic时,传入的subject、starter这些字段,当前生效的Topic模型根本没有,自然会炸TypeError;创建Post时也会因为字段不匹配失败,数据当然存不进数据库。
怎么修复?
删掉models.py里重复的那两个模型定义,只保留第一个完整的Topic和Post类就行。修正后的models.py应该是这样:
from django.db import models from django.contrib.auth.models import User class Board(models.Model): name = models.CharField(max_length=30, unique=True) description = models.CharField(max_length=100) def __str__(self): return self.name class Topic(models.Model): subject = models.CharField(max_length=255) last_updated = models.DateTimeField(auto_now_add=True) board = models.ForeignKey(Board, related_name='topics',on_delete=models.CASCADE) starter = models.ForeignKey(User, related_name='topics',on_delete=models.CASCADE) class Post(models.Model): message = models.TextField(max_length=4000) topic = models.ForeignKey(Topic, related_name='posts',on_delete=models.CASCADE) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(null=True) created_by = models.ForeignKey(User, related_name='posts',on_delete=models.CASCADE) updated_by = models.ForeignKey(User, null=True, related_name='+',on_delete=models.CASCADE)
最后别忘了这步
修复完模型后,得跑数据库迁移命令让改动生效:
python manage.py makemigrations python manage.py migrate
现在再去测试创建新主题的功能,应该就能正常存储数据,不会再抛TypeError啦!
内容的提问来源于stack exchange,提问作者Thinker
相关产品推荐
相关产品推荐

