Django序列化报错:ThreadSerializer缺少Meta.model属性求解
问题描述
搭建移动端论坛后端,使用Postman测试API接口时触发错误:ThreadSerializer类缺少"Meta.model"属性。
原Serializer代码
from rest_framework import serializers from forum.models import Thread from forum.models import Post class ThreadSerializer(serializers.ModelSerializer): class Meta: Thread_Model = Thread Thread_Fields = ['id', 'thread_id', 'title', 'desc', 'created_at'] class PostSerializer(serializers.ModelSerializer): class Meta: Post_Model = Post Post_Fields = ['id', 'post_id', 'post_content', 'post_time', 'thread_id']
原Model代码
from django.db import models from django.conf import settings from Authentication.models import User # Create your models here. class Thread(models.Model): userid = models.ForeignKey(User, on_delete=models.CASCADE) thread_id = models.AutoField(primary_key=True) title = models.CharField(max_length=100) desc = models.TextField() created_at = models.DateTimeField(auto_now_add=True) class Post(models.Model): userid = models.ForeignKey(User, on_delete=models.CASCADE) thread_id = models.ForeignKey(Thread, on_delete=models.CASCADE) post_id = models.AutoField(primary_key=True) post_content = models.TextField() post_time = models.DateTimeField(auto_now_add=True)
解决方法
错误核心是Serializer的Meta类属性命名不符合DRF规范:DRF规定ModelSerializer的Meta类必须用model指定关联模型,用fields指定序列化字段,你自定义的Thread_Model、Thread_Fields等命名无法被框架识别,因此触发"缺少Meta.model"的错误。
修改后的Serializer代码如下:
from rest_framework import serializers from forum.models import Thread from forum.models import Post class ThreadSerializer(serializers.ModelSerializer): class Meta: model = Thread # 修正属性名 fields = ['id', 'thread_id', 'title', 'desc', 'created_at'] # 修正属性名 class PostSerializer(serializers.ModelSerializer): class Meta: model = Post # 修正属性名 fields = ['id', 'post_id', 'post_content', 'post_time', 'thread_id'] # 修正属性名
修改后重新测试API即可解决该问题。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

