我觉得在有些应用场景下,这个操作是有用的,因为可以减少一个AJAX的请求,以增加性能。
当然,是二次请求,还是一次传输。这即要考虑用户体验,还要兼顾服务器性能。
一切是有条件的平衡吧。就算是一次传输,字段少的可以全部传,而字段多的就要自定义啦。
在以下样例里,发布单是主表,但相关的项目,组件,用户,如果默认情况下,只显示ID,很不友好。
我们可以将相关的外键名称也一并序列化啦。
重点的DRF:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'first_name', 'last_name', 'is_superuser')
class SiteSerializer(serializers.ModelSerializer):
class Meta:
model = Site
fields = ('id', 'name')
class AppSerializer(serializers.ModelSerializer):
class Meta:
model = App
fields = ('id', 'name')
class DeployPoolSerializer(serializers.ModelSerializer):
site = SiteSerializer(source='site_name') #如有问题,记得那个read_only,many之类的参数,然后看官方文档
app = SiteSerializer(source='app_name')
create_user = UserSerializer()
class Meta:
model = DeployPool
fields = ('id', 'name', 'description', 'site', 'app', 'branch_build',
'jira_issue_no', 'create_user', 'change_date')
read_only_fields = ('name',)
angular服务和控制器:
prismVersion.factory("versionSrv", ['$resource', function ($resource) { return $resource( "http://127.0.0.1:8000/server_api/version_api/:Id", {Id: "@Id" }, {'query': {method: 'GET' }}, {update: {method: "PUT"}} ); }]); prismVersion.factory("siteSrv", ['$resource', function ($resource) { return $resource( "http://127.0.0.1:8000/server_api/site_api/:Id", {Id: "@Id" }, {'query': {method: 'GET' }}, {update: {method: "PUT"}} ); }]); prismVersion.controller('versionCtrl', ['$scope','versionSrv','siteSrv', function($scope, versionSrv, siteSrv){ $scope.versions = versionSrv.query(); }]);
angular显示:
<tr ng-repeat="item in versions.results"> <td> <a href="#" target="_blank">{{item.id}}-{{item.name}}</a> </td> <td> <a href="#"> {{item.app.id}}- {{item.app.name}} </a> </td> <td> <a href="#"> {{item.site.id}}- {{item.site.name}} </a> </td> <td> {{item.branch_build}} </td> <td> <a href="#"> {{item.jira_issue_version}} </a> </td> <td> {{item.create_user.id}}- {{item.create_user.username}} </td> <td> {{item.change_date}} </td> </tr>
LOOK: