Контакты

Наибольший вклад в теги

Все теги (8)

Лучшие ответы пользователя

Все ответы (9)
  • Git, как обновить проект ?

    aruseni
    @aruseni
    Вам нужен центральный репозиторий, в который вы сможете загружать ваши новые правки с помощью git push (с любого компьютера), и из которого сможете загружать их в любое место, где у вас этот репозиторий склонирован, с помощью git pull. См. раздел о работе с удалёнными репозиториями в документации по Git.

    Вообще говоря, git позволяет работать и в полной децентрализации, но это в общем случае менее удобно.

    Так вот. Самое простое — воспользуйтесь услугами Github, хранить у них репозитории получается надёжно и недорого.

    Или, если вы готовы сами отвечать за резервирование и прочее, то разместите так называемый bare-репозиторий прямо у себя же на сервере.

    На практике последовательность действий, которые вам нужно совершить, описана здесь.

    Вкратце — создаёте bare-репозиторий, загружаете на сервер, и указываете его адрес в качестве origin у себя в локальном репозитории (а также в любых других местах, где есть этот репозиторий — например, у вас же на сервере):

    git remote add origin ssh://server.com/home/username/git/exampleproject

    Кроме того, тот же самый адрес репозитория можно использовать для того, чтобы клонировать его на других компьютерах:

    git clone ssh://server.com/home/username/git/exampleproject

    При этом remote при клонировании выставляется автоматически.

    А вообще, настоятельно рекомендую прочитать документацию по git, прогуглить интересующие вопросы, пройти вот такое короткое введение, и, поверьте, станет резко проще и понятнее.
    Ответ написан
    Комментировать
  • 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 комментариев
  • Есть ли утилитка "виртуальный микрофон"?

    aruseni
    @aruseni
    Попробуйте драйвер виртуального звукового кабеля от Евгения Музыченко. Позволяет перенаправлять звук от одной программы к другой.
    Ответ написан
    1 комментарий
  • Node.JS детям — возможно или фантастика?

    aruseni
    @aruseni
    Не совсем по теме, но может быть помните такого разработчика, Дмитрия Гаскина? Так он с докладом по jQuery на Google Tech Talks в 12 лет выступал. :)
    Ответ написан
    Комментировать
  • Как в django добавить в админку возможность изменения одного поля из другого класса?

    aruseni
    @aruseni
    Просто отобразить можно запросто:

    class OrdersAdmin(admin.ModelAdmin):
    
        fields = [
            'customer',
            'customer_address',
            'date',
            'amount_bottle',
            'price',
            'statusOrder'
        ]
        readonly_fields = ['customer_address',]
        list_filter = ['date']
        date_hierarchy = 'date'
    
        def customer_address(self, obj):
            return obj.customer.address
    
        customer_address.short_description = "Customer’s address"

    А вот с редактированием всё сложнее. Представьте себе, например, такую ситуацию — допустим, вы добавили в эту форму поле, которое сохраняется в поле address связанного объекта модели Customer. Но вот какое дело: пользователь в процессе редактирования поля поменял значение поля Customer, и поэтому объект Order связан уже с другим клиентом. Если всё равно сохранить адрес, то получится, что вы перезапишете значение уже для другого объекта, и это, возможно, будет неуместно. Если не сохранить — опять же, это может не быть ожидаемым поведением (может быть, пользователь хотел сохранить именно такой адрес для нового клиента).

    Тут я вижу такие варианты решения: или запрещать редактирование клиента, или прятать поле с адресом, если клиент изенён, или вообще динамически (с помощью JS) подгружать новый адрес при изменении клиента (и блокировать сохранение заказа, пока адрес не подгрузился).

    Если один из таких вариантов вам подходит, то вам нужно отредактировать используемую для страницы редактирования заказа форму, и дополнить обработку этой формы таким образом, чтобы значение поля с адресом сохранялось в поле address связанного объекта Customer.

    Удачи!

    P.S. Замечание по стилю: лучше не OrdersAdmin, а OrderAdmin (тем более, что Customer у вас напиано в единственном числе).
    Ответ написан
    Комментировать