You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:21:39