序列化后POST创建数据提示字段不能为空
问题前提:
# 文章模型
class Article(BaseModel):
title = models.CharField('标题', max_length=200, unique=True)
body = MDTextField('正文')
views = models.IntegerField('浏览量', default=0)
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
verbose_name='作者',
blank=False,
null=False,
on_delete=models.CASCADE
)
category = models.ForeignKey(
'Category',
verbose_name='分类',
blank=False,
null=False,
on_delete=models.CASCADE
)
# 用户模型:
class User(AbstractUser):
signature = models.CharField('个性签名', max_length=50, default='己所不欲,勿施于人')
def __str__(self):
return "%s" % self.username
# 序列化器
class ArticleListSerializer(serializers.ModelSerializer):
"""
序列化文章列表,便于返回JSON数据给前端
"""
# 嵌套用户介绍序列化器
author = UserDescSerializer(read_only=True)
class Meta:
model = Article
# fields = '__all__' # 序列化所有字段
fields = [
'id',
'title',
'body',
'author',
'category',
'created_time'
]
class UserDescSerializer(serializers.ModelSerializer):
"""
用于文章列表和详情引用的嵌套序列化器
"""
class Meta:
model = User
fields = [
'id',
'username',
'last_login',
'signature'
]
# 其中,author为外键字段
前端提交POST请求时,报错author_id不能为空
**解决方案:**增加author_id字段并序列化
class ArticleListSerializer(serializers.ModelSerializer):
"""
序列化文章列表,便于返回JSON数据给前端
"""
# 嵌套用户介绍序列化器
author = UserDescSerializer(read_only=True)
author_id = serializers.IntegerField() # 增加author_id字段
class Meta:
model = Article
# fields = '__all__' # 序列化所有字段
fields = [
'id',
'title',
'body',
'author',
'author_id', # 增加author字段
'category',
'created_time'
]
**猜测:**序列化中的不为空的字段在POST时必须要写,而User表为django的内建用户系统,当Articel模型与其关联时会自动为进行一对多的关联,此时若要增加article,需要指定 外键字段_id 的值,故需要额外在序列化器中添加author_id字段并序列化。
但是有个疑问,为什么category不需要额外添加并序列化category_id呢?如果您知道原因,还劳烦您告知,谢谢!
本文探讨了在使用序列化器创建数据时遇到的外键字段不能为空的问题,并给出了具体的解决方案。通过增加author_id字段并在序列化器中进行序列化,成功解决了这一问题。

1923

被折叠的 条评论
为什么被折叠?



