我正在使用Django-Rest-Framework构建我的第一个API,我对验证过程有点困惑.希望这是一个简单的答案,但我无法从6部分的介绍教程中弄清楚...
我有一个模特:
class XYZMeta(models.Model):
id = models.AutoField(primary_key=True)
xyz_id = models.ForeignKey(XYZ)
user_id = models.ForeignKey(User)
field_name = models.CharField(blank=True, max_length=50)
value = models.TextField(blank=True)
Run Code Online (Sandbox Code Playgroud)
和一个序列化器:
class XYZMetaSerializer(serializers.ModelSerializer):
class Meta:
model = XYZMeta
fields = ('id', 'xyz_id', 'user_id', 'field_name', 'value')
Run Code Online (Sandbox Code Playgroud)
并且观点:
class XYZMetaViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows xyz metadata to be viewed or edited.
"""
queryset = XYZMeta.objects.all()
serializer_class = serializers.XYZMetaSerializer
def perform_create(self, serializer):
serializer.save(user_id=self.request.user)
Run Code Online (Sandbox Code Playgroud)
当我发送POST来创建一个新对象时,它运行良好并使用授权用户的ID而不是我提供的任何值.例:
> curl -X POST -H "Content-Type:application/json" -d '{"xyz_id":"12345",**"user_id":2**,"field_name":"abc","value":"abc comment"}' -u admin:admin http://mysite/xyzmeta/
{"id":2,"dealer_id":12345,**"user_id":1**,"field_name":"abc","value":"abc comment","create_date":"2015-02-22T23:32:27.928991Z"}
Run Code Online (Sandbox Code Playgroud)
但是,如果我完全关闭user_id(因为无论如何都没关系),我收到一个错误,表明该字段是必需的:
> curl -X …Run Code Online (Sandbox Code Playgroud)