Oct. 3, 2019, 9:36 a.m.

Скачивание файлов

Здравствуйте.
Сделал небольшую модель для хранения прайс листа

class PriceList(models.Model):
    '''Модель прайс листа'''
    title = models.CharField(max_length=250, verbose_name='Заголовок')
    file = models.FileField(upload_to='price_list/%y/%m/%d/', verbose_name='Файл')
    count = models.PositiveIntegerField(default=0, verbose_name='Кол-во загрузок')
    is_active = models.BooleanField(default=True, verbose_name='Модерация')
    created = models.DateTimeField(auto_now_add=True, verbose_name='Создан')
    updated = models.DateTimeField(auto_now=True, verbose_name='Изменен')

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Прайс лист'
        verbose_name_plural = 'Прайс листы'
        ordering = ['-created']

Нужно чтобы загрузка файла была доступна с любой страницы сайта. Поэтому сделал через контекстный процессор.

def price_list(request):
    '''Прайс лист'''
    price = PriceList.objects.filter(is_active=True)

    return {'price_list': price}

Все работает хорошо, файл прайс листа добавляется с админки и скачивается с сайта.
Вопрос. Как сделать подсчет количества скачиваний файла?

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
5

Добрый день.

Первое, что приходит на ум, так это сделать ссылку на какой-нибудь view, который будет увеличивать счётчик скачиваемого файла, и только потом переадресовывать непосрдественно на скачиваемый файл в отдельной вкладке.

Это самое просто, что можно реализовать.

можете примером кода помочь? я сделал но у меня получилось, что при обновлении страницы счетчик увеличивает значение а нужно по клику по ссылке чтоб это происходило.
и получается, что после того как сделал ссылку на эту вьюху, то это работает только сдесь http://192.168.1.5:8001/price
если перейти на любую другую страницу то ссылки вобще нет.

Добрый день. Я имел ввиду, что нужно сделать отдельную вьюшку, которая будет делать редирект.

Например, может быть такая вьюшка

def counted_download(request, pk):
    file = get_object_or_404(File, pk=pk)
    file.downloads += 1
    file.save()
    return redirect(file.get_absolute_url())

А в шаблоне страницы просто добавить именно url этой вьюшки, вместо прямой ссылки на файл

{% url 'counted_download' file.id %}

Не забудьте вьюшку добавить в urls.py

Собственно говоря - это первое, что я попытался бы сделать

Здравствуйте.
Спасибо, я вас понял, сегодня чуть позже сделаю.

Здравствуйте.
Все получилось, только редирект сделал по другому redirect(price.file.url)
Спасибо вам за помощь!

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Looking for a Job?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

SV
Oct. 23, 2019, 1 a.m.
Semen Voloh

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:70points,
  • Rating points1
SS
Oct. 22, 2019, 2:31 p.m.
Samantha Smith

Qt - Test 001. Signals and slots

  • Result:52points,
  • Rating points-4
MB
Oct. 21, 2019, 1:25 a.m.
Mihail Bulatov

C++ - Test 002. Constants

  • Result:16points,
  • Rating points-10
Last comments
Oct. 17, 2019, 2:17 a.m.
Evgenij Legotskoj

Используем, там где требуется :)
MP
Oct. 17, 2019, 2:15 a.m.
Mikhail Petrov

Совет: подключайте ресурсы динамически. Используйте Resource Compiler: https://doc.qt.io/qt-5/rcc.html
Oct. 16, 2019, 6:45 a.m.
Evgenij Legotskoj

Если это не чистой воды спам, а по делу, то без проблем. Но в таком случае лучше создавайте отдельный вопрос на форуме . При создании вопроса есть поле, в котором можно указать статью…
KK
Oct. 16, 2019, 6:39 a.m.
Kirill Kirilych

А тут можно ссылки на сторонний ресурс показывать? Нашёл на habr похожую статью, только там чуток отличается код и про локальный сервер написано, нужно чтоб кто то понимающий посмотрел и своё …
Now discuss on the forum
Oct. 23, 2019, 4:06 a.m.
Evgenij Legotskoj

Ну если после обновления начало появляться, то тогда откатить драйвера. А вообще, если это жить не мешает и код работает как и раньше, то просто проигнорировать эти сообщения.
Oct. 22, 2019, 2:42 a.m.
Pavel K.

Всем привет , Пытаюсь реализовать класс для работы с блютуз (Bluetooth Handler) для мобилки , с использование QBluetoothDeviceInfo и QBluetoothDeviceDiscoveryAgent . Может у кого е…
Oct. 22, 2019, 2:16 a.m.
Pavel K.

попробуй сделать через свой собственный компонет , те возьми контрол Component, например , переорпедели как свой , в нем что нить типо проперти type : disk1, disk2 (сделай метод в структуре …
E
Oct. 22, 2019, 12:03 a.m.
Evgenij_Kanusovskij@1981

Этот алгоритм предназначен для того чтобы исключить из обработки строки содержащие буквенные символы. Если Вам не трудно опишите пожалуйста как бы Вы написали этот алгоритм, желательно в коде?
MP
Oct. 21, 2019, 7:03 a.m.
Mikhail Petrov

Зависит от вашей задачи. Можете обратить внимание на этот пример: https://doc.qt.io/qt-5/qtqml-referenceexamples-properties-example.html QQmlListProperty используется мною достаточно ч…
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB