我试图通过Django Rest Framework API调用使我的用户模型RESTful,以便我可以创build用户以及更新他们的configuration文件。 但是,当我与用户进行特定的validation过程时,我不希望用户能够在帐户创build后更新用户名。 我试图使用read_only_fields,但似乎在POST操作中禁用了该字段,所以在创build用户对象时我无法指定用户名。 我怎么去执行这个? 现在API的相关代码如下所示。 class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ('url', 'username', 'password', 'email') write_only_fields = ('password',) def restore_object(self, attrs, instance=None): user = super(UserSerializer, self).restore_object(attrs, instance) user.set_password(attrs['password']) return user class UserViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ serializer_class = UserSerializer model = […]
我试图序列化一个包含属性字段,我也想序列化的模型。 models.py: class MyModel(models.Model): name = models.CharField(max_length=100) slug = models.AutoSlugField(populate_from='name') @property def ext_link(self): return "/".join([settings.EXT_BASE_URL, self.slug]) serializers.py: class MyModelSerializer(serializers.ModelSerializer): class Meta: model = MyModel fields = ('name', 'ext_link') 当试图去相关的URL,我得到一个序列化exception( ext_link )的ext_link属性。 我如何序列化ext_link属性?
我想要序列化一个模型,但想要包含一个额外的字段,需要在待实例化的模型实例上进行一些数据库查找: class FooSerializer(serializers.ModelSerializer): my_field = … # result of some database queries on the input Foo object class Meta: model = Foo fields = ('id', 'name', 'myfield') 什么是正确的方法来做到这一点? 我看到你可以传递额外的“上下文”到序列化程序,是正确的答案传递在上下文字典中的额外的领域? 采用这种方法,获取我所需要的字段的逻辑将不会与序列化程序定义自成一体,这是理想的,因为每个序列化的实例都需要my_field 。 在DRF序列化文件的其他地方,它说 “额外的字段可以对应任何属性或在模型上可调用”。 额外的领域我在说什么? 我应该在Foo的模型定义中定义一个返回my_field值的函数,而在序列化程序中,我将my_field连接到可调用的? 这是什么样子? 在此先感谢,如有必要,我们很乐意澄清这个问题。
我是Django REST框架的初学者,需要你的build议。 我正在开发一个Web服务。 该服务必须提供REST接口到其他服务。 REST接口,我需要实现,不直接与我的模型(我的意思是得到,放,发布,删除操作)。 相反,它提供了一些计算结果的其他服务。 在请求我的服务进行一些计算,只是返回结果(不会将结果存储在自己的数据库中)。 以下是我对如何实现REST接口的理解。 纠正我,如果我错了。 创build进行计算的类。 将其命名为“CalcClass”。 CalcClass在其工作中使用模型。 计算所需的parameter passing给构造函数。 执行计算操作。 它将结果作为“ResultClass”返回。 创buildResultClass。 从对象派生。 它只是具有包含计算结果的属性。 计算结果的一部分被表示为元组的元组。 据我所知,进一步的序列化将更好地为这些结果实现一个单独的类,并将这些对象的列表添加到ResultClass。 为ResultClass创build序列化程序。 从serializers.Serializer派生。 计算结果是只读的,因此主要使用Field类的字段,而不是专门的类,如IntegerField。 我不应该在ResultClass和Serializer上impl save()方法,因为我不打算存储结果(我只是想根据请求返回它们)。 用于嵌套结果的Impl序列化器(记得上面提到的元组的元组)。 创build视图来返回计算结果。 从APIView派生。 只需要得到()。 在get()中创buildCalcClass,并从请求中获取参数,调用它的calc(),得到ResultClass,创buildSerializer并将ResultClass传递给它,返回Response(serializer.data)。 url 在我的情况下没有api根。 我应该只有url来获得各种计算结果(与差异参数计算)。 添加调用format_suffix_patterns为api浏览。 我错过了什么? 这个方法一般是正确的吗?
为什么你会使用另一个,为您的Django应用程序公开一个API? http://pypi.python.org/pypi/djangorestframework/ http://pypi.python.org/pypi/django-tastypie