• Как парсить новости с одного сайта и перемещать их на свой твит?

    opium
    @opium
    Просто люблю качественно работать
    Ну на эту тему можно почитать уголовный кодекс российской федерации
    Ответ написан
    1 комментарий
  • Насколько актуален macbook pro 2012 летом 2014-го?

    Нет. Ретина есть, вместительный SSD есть, что еще надо. Можно попробовать добить оперативную память до 16.
    Ответ написан
    Комментировать
  • Django - как посчитать количество часов, минут, секунд (TimeField)?

    aruseni
    @aruseni
    Если нужно универсальное решение для сравнения любых двух полей, содержащих время — тогда, вероятно, template tag будет вполне адекватным решением. Если же вам нужно сравнивать только два конкретных поля этой модели, вам будет намного проще добавить в модель соответствующие методы, и обращаться из шаблона к ним ({{ blablabla_obj.hours }}, {{ blablabla_obj.minutes }}, {{ blablabla_obj.seconds }}).

    Впрочем, ваш вопрос составлен неточно. Вам нужно именно узнавать разницу между этими двумя значениями? В виде HH:MM:SS?

    Update 1

    Автор указал, что минуты и секунды вообще не указываются, и при этом end_t всегда больше, чем start_t. Таким образом, достаточно сравнить start_t.hour и end_t.hour.

    Сделать это можно, добавив в модель соответствующий метод:

    class Blablabla(models.Model):
        start_t = models.TimeField(u"From", blank=True, null=True)
        end_t  = models.TimeField(u"To", blank=True, null=True)
    
        def period_duration(self):
            """
            Returns the length of the period between
            start_t and end_t, in hours.
    
            This is precise as long as both values
            have 0 as minute/second.
            """
            return self.end_t.hour - self.start_t.hour

    Далее, соответственно, если blablabla_obj — это объект модели Blablabla, то получить разницу между start_t и end_t можно с помощью blablabla_obj.period_duration() в коде или {{ blablabla_obj.period_duration }} в шаблоне.

    Тест:

    class BlablablaTestCase(TestCase):
        def setUp(self):
            start_t = datetime.time(14)
            end_t = datetime.time(18)
            self.blablabla_obj = Blablabla.objects.create(
                start_t=start_t,
                end_t=end_t
            )
    
        def test_period_calculation(self):
            """
            Tests that the period_duration method of the Blablabla
            model correctly compares start_t and end_t.
            """
            self.assertEqual(self.blablabla_obj.period_duration(), 4)
    
        def tearDown(self):
            self.blablabla_obj.delete()

    Update 2

    Если нужно считать и часы, и минуты, и секунды, то метод period_duration можно переписать вот так:

    def period_duration(self):
        """
        Returns the length of the period between
        start_t and end_t, in the following format:
    
        HH:MM:SS
        """
        total_seconds = (
            (
                self.end_t.hour*3600
                +
                self.end_t.minute*60
                +
                self.end_t.second
            ) - (
                self.start_t.hour*3600
                +
                self.start_t.minute*60
                +
                self.start_t.second
            )
        )
        hour, total_seconds = divmod(total_seconds, 3600)
        minute, total_seconds = divmod(total_seconds, 60)
        second = total_seconds
        return "%02d:%02d:%02d" % (hour, minute, second)
    Ответ написан
    6 комментариев
  • IPython, вывести список объявленных в интерактивной оболочке переменных

    @throughtheether
    human after all
    какой командой (быть может, она есть) можно вывести список переменных которые я объявил находясь в интерактивной оболочке IPython

    who или, более детально, whos
    Ответ написан
    2 комментария