在我的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端点应该是什么样的吗?
由于
答案 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
值。