django - 没有更改代码,但我的程序现在无法运行
问题描述
我有一个带有用户外键的 Django Post 模型。当我创建一个帖子时,它通常会工作并按照序列化程序中的说明用请求的用户填充用户,但在 Postman 上我得到:
{
"user": [
"This field is required."
]
}
这是 API 视图:
class PostViewset(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
permission_classes = [IsOwnerOrReadOnly]
def perform_create(self, serializer):
serializer.save(user=self.request.user)
这是序列化程序:
class PostSerializer(serializers.ModelSerializer):
user_name = serializers.SerializerMethodField()
class Meta:
model = Post
fields = ['user', 'id', 'title', 'body', 'user_name']
def get_user_name(self, obj):
try:
return obj.user.user_name
except:
pass
解决方案
user
从序列化程序类中删除,fields
因为您正在使用该perform_create(...)
方法分配登录用户
class PostSerializer(serializers.ModelSerializer):
user_name = serializers.SerializerMethodField()
class Meta:
model = Post
fields = ['id', 'title', 'body', 'user_name']
def get_user_name(self, obj):
try:
return obj.user.user_name
except:
pass
推荐阅读
- javascript - 调度不是减速器中的功能
- android - 通话意图后唤醒锁丢失
- ansible - Ansible 从 vmware_host_vmhba_facts 打印特定字段
- reactjs - React PropTypes.shapes 相互依赖
- angular - 带有取消图标的 matChip 无法移除并以不同方式显示
- flutter - 通过 android 和 ios 中的几个按钮在社交媒体上分享链接
- java - 为什么我的 Combobox 不能正确更新其颜色?
- javascript - 如果选择了所有子节点,如何将父树节点标记为选中
- javascript - 如何使用 PHP 中循环数据中的方法 post 将数据发送到控制器
- c++ - 我的 epoll 服务器丢失了一些连接。为什么?