【发布时间】:2015-02-03 11:48:33
【问题描述】:
我正在尝试为我的 ViewSet 实现一些特定的视图,但要保持简洁优雅的代码。我有一些服务器和一些数据中心;
models.py
class Datacenter(models.Model):
name = models.CharField(max_length=50)
status = models.CharField(max_length=50)
def __unicode__(self):
return self.name
class Server(models.Model):
datacenter = models.ForeignKey(Datacenter,related_name="servers")
hostname = models.CharField(max_length=50)
def __unicode__(self):
return self.hostname
serializers.py
class ServerSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Server
class DatacenterSerializer(serializers.ModelSerializer):
Servers = ServerSerializer(many=True)
class Meta:
model = Datacenter
fields = ('id', 'name','status','Servers')
views.py
class DatacenterViewSet(viewsets.ModelViewSet):
queryset = Datacenter.objects.all()
serializer_class = DatacenterSerializer
class ServerViewSet(viewsets.ModelViewSet):
queryset = Server.objects.all()
serializer_class = ServerSerializer
urls.py
router = routers.DefaultRouter()
router.register(r'Enviroment', views.EnviromentViewSet)
router.register(r'Server', views.ServerViewSet)
urlpatterns = patterns('',url(r'^', include(router.urls)))
因此,我想要实现的一个清晰示例是一个数据中心中所有服务器的视图,例如;
/datacenter/{id}/servers
我检查了其他类似的问题,例如 this one 和 this one,但我不确定这些实际上是最好的方法,我也无法按照 answer given by mariodev 中的描述使其工作
我试图避免使用像 Tom Dickin suggested 这样的 url 模式来解决这个问题
据我了解,这可以使用viewsets、routers 或generic-views 解决
最简单的解决方案是什么?有人能指出我正确的方向吗?
【问题讨论】:
-
你可以在视图集中使用临时方法
标签: python django rest django-rest-framework