Django-Rest-Framework能否创建一个返回Object Model实例的单个属性的API?

时间:2014-03-17 17:09:24

标签: python django api django-rest-framework

在我的Django应用程序中,我有以下模型:

class MyModelA(models.Model):  
    myAttributeA = models.CharField(max_length=255)


class MyModelB(models.Model):
    myParent = models.OneToOneField(myModelA)  
    myAttributeB = models.CharField(max_length=255)

我的settings.py具有以下休息权限设置:

'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',),

我还有以下序列化程序:

class MyModelASerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
    model = MyModelA
    fields = ('myAttributeA',)

class MyModelBSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
    model = MyModelB
    fields = ('myParent', 'myAttributeB',)

现在我想编写一个简单的Django-Rest-Framework API,允许任何用户(天气认证或未经过身份验证)在MyModelB的任何实例上检索myParent的值,假设他们拥有MyModelB实例的主键。这应该很简单。我没有尝试更新,创建或删除任何内容。我只想检索实例的一个属性的值。但我也希望我的urls.py将此端点与API匹配:

url(r'^api/AttrMyModelA/(?P<myModelAID>\d+)/?$', SOMETHING HERE. NOT SURE WHAT)

但是,我无法弄清楚教程中使用哪种模式来实现这项功能。我应该使用基于功能或基于类的视图吗?我应该使用通用API视图吗?我需要装饰师吗?混入?有人可以告诉我我的视图应该是什么样的以及urls.py端点应该是什么样的吗?

由于

1 个答案:

答案 0 :(得分:2)

您需要一个RetrieveAPIView派生类来将事物联系在一起:

class MyModelAView(RetrieveAPIView):
    model = MyModelA
    serializer_class = MyModelASerializer

您提到的路线将如下所示:

url(r'^api/AttrMyModelA/(?P<pk>\d+)/?$', MyModelAView.as_view())

请注意pk是执行单个对象查询时APIView派生类使用的默认查找字段。

您已定义了默认权限类(在settings.py中),因此除非您要覆盖它,否则无需在视图类中指定permission_classes值。