【发布时间】:2018-12-05 17:46:04
【问题描述】:
我想在我的 rest api 中实现一个功能,用户可以为新闻提要添加特定的关键字。
因此,如果用户使用关键字进行发布请求,则用户对象将添加到预定义的关键字(在数据库中预定义)。
我已经用这段代码试过了,但如果我尝试用邮递员模拟发布请求,我总是遇到这个问题:
将添加关键字,但不会添加提供的 json 数据,它只是一个空字符串,并且 post 请求也返回一个空关键字...
我希望你能帮助我,也许你可以给我一个建议,如何只允许已经定义的静态关键字,并允许用户只有一个关键字一次(没有具有相同值的双关键字)
使用此标头制作:
[{"key":"Content-Type","value":"application/json","description":""}]
[{"key":"Authorization","value":"Token xxxxxxx","description":""}]
Body:
{
"name": "keyword1"
}
授权有效,因此用户添加到空关键字
我对 django 很陌生,我正在做这个项目来提高我的技能,所以请对我宽容:) 所以它可能是完全错误的,请给我一些建议来解决我的问题
这些是实现的 sn-ps:
models.py
class Keywords(models.Model):
name = models.CharField(max_length=200)
user = models.ManyToManyField(User)
def __str__(self):
return self.name
序列化器.py
class KeywordSerializer(serializers.Serializer):
class Meta:
model = Keywords
fields = ('id', 'name', 'user')
def create(self, validated_data):
keyword = Keywords(**validated_data)
keyword.save()
keyword.user.add(self.context['request'].user)
return keyword
views.py
class KeywordAPI(generics.RetrieveAPIView):
permission_classes = [permissions.IsAuthenticated, ]
serializer_class = KeywordSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
keyword = serializer.save()
return Response({
"name": KeywordSerializer(keyword, context=self.get_serializer_context()).data,
})
【问题讨论】:
-
您能否澄清一下“将添加关键字但不添加提供的 json 数据”的意思?它只是添加一个关键字,其中
name是一个空字符串吗?另外,尝试在post方法中打印request.data以查看原始数据中的名称。 -
@slider 如果我在 post 请求中使用 json 数据 {„name“:“keyword1”} 将用户添加到特定关键字,那么 django 只保存一个空字符串作为关键字
标签: django django-models django-rest-framework django-serializer