2015-07-15 1 views
1

Я написал приложение для уведомления с использованием swampdragon. К сожалению, переменная pub_date включает микросекунды, которые я не хочу, чтобы она была там. Как я могу отформатировать его как «dd-MM-yyyy HH: mm: ss» или как на сайте администратора (версия для m.m.m)? Мои controller.js:приложение для уведомления в реальном времени DateTimeField issue

var AnnounceControllers = angular.module('AnnounceControllers', []); 


AnnounceControllers.controller('AnnounceListCtrl', ['$scope', '$dragon', function ($scope, $dragon) { 
$scope.announceList = {}; 
$scope.announcements = []; 
$scope.channel = 'announce'; 

$dragon.onReady(function() { 
    $dragon.subscribe('announcements', $scope.channel, {announce_list__id: 1}).then(function(response) { 
     $scope.dataMapper = new DataMapper(response.data); 
    }); 

    $dragon.getSingle('announce-list', {id:1}).then(function(response) { 
     $scope.announceList = response.data; 
    }); 

    $dragon.getList('announcements', {list_id:1}).then(function(response) { 
     $scope.announcements = response.data; 
    }); 
}); 

$dragon.onChannelMessage(function(channels, message) { 
    if (indexOf.call(channels, $scope.channel) > -1) { 
     $scope.$apply(function() { 
      $scope.dataMapper.mapData($scope.announcements, message); 
     }); 
    } 
}); 
}]); 

Мои app.js:

var AnnounceApp = angular.module('AnnounceApp', [ 
'SwampDragonServices', 
'AnnounceControllers' 
]); 

В HTML:

<h3 ng-repeat="item in announcements"> 
     <div class="alert alert-info" role="alert"> 
      {{ item.content }} {{item.pub_date| date:'dd-MM-yyyy HH:mm:ss'}} 
      <br> 
     </div> 
     </h3> 

models.py:

pub_date = models.DateTimeField(auto_now_add = True) 

serializers.py:

class AnnounceSerializer(ModelSerializer): 
class Meta: 
    model = "post.Announce" 
    publish_fields = ("content","pub_date") 
+0

Если фильтр угловой даты не работает, может быть, что 'pub_date' является строкой, попробуйте разобрать его на дату JavaScript? – Starscream1984

+0

Как я могу это сделать? – kings856

+0

Я добавил serializers.py к вопросу, также я попробовал новые модели. TextField и на самом деле использует pre_save сигнал для преобразования pub_date в isoformat, но он не работает – kings856

ответ

0

Я использовал некоторую информацию от Daniel Коттоне и сделал те:

class Announce(SelfPublishModel, models.Model): 
serializer_class = AnnounceSerializer 
announce_list = models.ForeignKey(AnnounceList) 
content = models.CharField(max_length=100) 
pub_date = models.DateTimeField(default=datetime.now) 
date = models.TextField(null=True) 

def __unicode__(self): 
    return self.content 


@receiver(pre_save,sender=Announce) 
    def date_handler(sender,instance,*args,**kwargs): 
     instance.date = instance.pub_date.isoformat() 

isoformat без параметров работал для меня.

1

Вы должны преобразовать DateTimeField в формат ISO 8061, так что дата фильтр AngularJS будет работать:

pub_date = models.DateTimeField(auto_now_add = True).isoformat(' ') 

See this for more info.

EDIT:

После дальнейших разъяснений, проблема в том, что временная метка, которую вы получаете, не отформатирована должным образом, чтобы javascript распознал ее как дату. See this plunkr for to how fix that.

+0

Объект DateTimeField не имеет атрибута 'isoformat' – kings856

+0

Проверьте этот смысл: https://gist.github.com/bryanchow/1195854 –

+0

Я использую учебник swampdragon, и в этом уроке для сериализации объектов используется ModelSerializer, и я знаю, что «iso-8601» - это выходной формат. Я вижу выход как 2015-07-20 16: 52: 51.347082 – kings856

 Смежные вопросы

  • Нет связанных вопросов^_^