• Корректно ли указывать так адреса в корневом urls.py?

    WStanley
    @WStanley
    Back-end Developer
    Да, ты правильно понимаешь. Думаю что это не особо корректно, но я так писал и это работает на одном из сайтов уже больше года, проблем нет.
    только я коммент оставил, на всякий
    # Эти 2 роута всегда внизу! posts последний!
        path('', include('front.urls')),
        path('', include('posts.urls')),

    Это у меня связано с тем, что СЕОшник просит все ссылки сделать короткими на сайте, т.е. они все вида
    domain.ru/my_link
    Ответ написан
    Комментировать
  • Как сформировать вывод элементов по алфавиту с группировкой?

    WStanley
    @WStanley
    Back-end Developer
    Например raw запросом можно это получить
    https://docs.djangoproject.com/en/3.1/topics/db/sq...
    books = Books.objects.raw(
        """SELECT id, name FROM            
        (
            SELECT DISTINCT NULL AS id, LEFT(name, 1) AS name FROM Books
            UNION ALL
            SELECT DISTINCT  id, name FROM  Books AS Books1
            ORDER BY name
        ) AS t1
        ORDER BY name""")
    
    for book in books:
        print(book.id)
        print(book.name)
    Ответ написан
    Комментировать
  • Как в Django на главной странице вывести одну запись из БД?

    WStanley
    @WStanley
    Back-end Developer
    Трям!
    DetailView - выводит на страницу 1 запись, да. Но для вывода она просит передать ей pk этой записи (primary key который id обычно) или slug(его у тебя нет в таблице), о чем и говорит твоя ошибка - MainPagesDetailView must be called with either an object pk or a slug in the URLcon

    urlpatterns = [
        path('<int:id>/', views.MainPagesDetailView.as_view(), name='index'),
        # или
        path('<slug:slug>/', views.MainPagesDetailView.as_view(), name='index'),
    ]

    Соответственно обратиться на страницу придется по ключу
    http://my_domain/pk/ 
    или
    http://my_domain/slug/

    Почитай доку
    https://docs.djangoproject.com/en/3.1/ref/class-ba...
    ПС: id в таблице у тебя есть

    Если же ты хочешь вывести на главной странице запись по обращению к домену без ключа, то используй например TemplateView
    https://docs.djangoproject.com/en/3.1/ref/class-ba...
    в get_context_data передай в шаблон любые данные кот нужны и обращайся к ним в шаблоне
    Ответ написан
  • Как составить сложный запрос?

    WStanley
    @WStanley
    Back-end Developer
    Непонятно почему у тебя в таблицу employee есть и id и employee_id, привожу запрос в котором appointment.employee_id = employee.id и позволил себе предположить что в таблице employee есть поле name
    Есть нюанс, этот запрос покажет сотрудников у кот есть клиенты не более трех записанных именно на 09:00, если у этого же сотрудника есть еще два клиента(т.е. общее число клиентов 5) на 14:00 то он(сотрудник) тоже будет показан, но только с клиентами на 9:00 т.к. группировка есть по времени, надеюсь понятно написал
    SELECT
        EMPLOYEE.ID
    ,   EMPLOYEE.NAME
    FROM
        EMPLOYEE
    LEFT OUTER JOIN
        APPOINTMENT
    ON
        EMPLOYEE.ID =   APPOINTMENT.EMPLOYEE_ID
    GROUP BY
        EMPLOYEE.ID
    ,   EMPLOYEE.NAME
    ,   APPOINTMENT.START_TIME
    HAVING
        (COUNT(APPOINTMENT.EMPLOYEE_ID) <=  3)
    AND (APPOINTMENT.START_TIME =   CONVERT(TIME, '09:00:00', 114))
    Ответ написан
  • Почему шаблон django игнорирует id в словаре?

    WStanley
    @WStanley
    Back-end Developer
    1. Тебе надо чтобы твоя модель с комментариями имела ключ сама на себя
    parent = models.ForeignKey("self")
    2. Тебе надо во вью сформировать к примеру вот такой список с данными
    ПС: это делается с помощью рекурсивной функции, гугли (как рекурсивно сформировать дерево, примерно)
    ПС2: в список возможно также стоит включить parent_id и все что необходимо
    comments = [{
        'id': 1,
        'text': 'asdaasd',
        'childrens': []
    },
    {    'id': 2,
        'text': 'asdaasd',
        'childrens': [
            {    'id': 7,
                'text': 'asdaasd',
                'childrens': [
                    {    'id': 12,
                        'text': 'asdaasd',
                        'childrens': [
                            {    'id': 23,
                                'text': 'asdaasd',
                                'childrens': [],
                            },
                            ... # и т.д.
                        ],
                    },
                    ... # и т.д.
                ],
            },
            {    'id': 8,
                'text': 'asdaasd',
                'childrens': [],
            },
            ... # и т.д.
        ],
    },
    {    'id': 2,
        'text': 'asdaasd',
        'childrens': [
            {    'id': 15,
                'text': 'asdaasd',
                'childrens': [],
            },
            {    'id': 19,
                'text': 'asdaasd',
                'childrens': [],
            },
            ... # и т.д.
        ],
    }
    ... # и т.д.
    ]

    3. После этого выкинуть его в шаблон, и в шаблоне можно будет сделать так:
    ПС: там где список childrens пустой значит нет комментариев-ответов
    {%for comment in comments%}
        {{ comment.id }}
        {{ comment.text }}
        {% if comment.childrens %}
             # По идее здесь тоже надо будет организовать рекурсию, для отображения множественной вложенности
             # гугли - django template recursive tree, примерно
             # К вложенным комментариям вот так можно обращаться будет
            {% for children in comment.childrens  %}
                 {{ children.id }}
                 {{ children.text }}
                 {% if children.childrens %}
                      # и т.д.
                 {% endif %}
            {% endfor %}
        {% endif %}
    {% endfor %}

    Вот примерно так все это должно работать если использовать ссылку на себя
    ПС: а вообще для работы с деревом грамотно использовать nested sets что и делается в django-mptt, но это уже совсем другая история :)
    Удачного велосипедирования!
    Ответ написан
    4 комментария
  • Как получить переменную из строки запроса GET?

    WStanley
    @WStanley
    Back-end Developer
    Есть midlleware в django django.contrib.auth.middleware Он как раз ложит авторизованного юзера в request поэтому во всех views в request можно обратиться и получить авторизованного юзера вот так:
    def get_queryset(self)
        user = self.request.user # тут юзер
        user_id = self.request.user.id # так ИД юзера

    https://docs.djangoproject.com/en/3.1/ref/middlewa...
    И передавать ИД авторизованного юзера через url нет смысла

    Получить параметр с Урла можно так
    https://docs.djangoproject.com/en/3.1/topics/http/...
    path("<int:my_param>/profile/", ProfileUpdate.as_view(), name="profile-api-update" ),
    # Только я бы последним параметр передавал, вот так
    # path("/profile/<int:my_param>/", ProfileUpdate.as_view(), name="profile-api-update" ),
    
    class ProfileUpdate(View):
    
        def get(self, request, my_param):
            print(my_param)
            return render(request, self.template_name)
    
        def post(self, request, my_param):
            print(my_param)
            return render(request, self.template_name)
    
        def get_queryset(self):
            my_param=self.kwargs['my_param']
            my_param=self.kwargs.get('my_param') # лучше так
    Ответ написан
  • Джойним 3 таблицы sql, как?

    WStanley
    @WStanley
    Back-end Developer
    В общем если id в 1 таблице это id из 3 то так можно:
    SELECT
        3TABLE.ID
        -- Вычисляем скидку
    ,   CASE
            WHEN
                TIMES   >   2
            THEN
                '20'
            ELSE
                '5'
        END             AS  DISCOUNT
    FROM
        3TABLE
    LEFT OUTER JOIN
        (
            -- Группируем по ИД
            -- Суммируем sales
            -- Берем более 1500
            SELECT
                ID
            ,   SUM(SALES)  AS  SALES
            FROM
                (
                    -- Выбираем Samara и Barcelona
                    -- Исключаем England
                    -- Группируем (хотя, вот здесь наверное можно не группировать)
                    SELECT
                        1TABLE.ID
                    ,   SUM(1TABLE.SALES) AS  SALES
                    FROM
                        1TABLE
                    INNER JOIN
                        2TABLE
                    ON
                        1TABLE.CITY   =   2TABLE.CITY
                    GROUP BY
                        1TABLE.ID
                    ,   1TABLE.CITY
                    ,   2TABLE.COUNTRY
                    ,   1TABLE.SALES
                    HAVING
                        (1TABLE.CITY  IN  (N'Samara', N'Barcelona'))
                    AND (NOT    (
                            2TABLE.COUNTRY    =   N'England'
                        ))
                )   AS  WRAP_TABLE
            GROUP BY
                ID
            HAVING        (SUM(sales) > 1500)
        )   AS  SUM_WRAP_TABLE
    ON
        SUM_WRAP_TABLE.ID   =   3TABLE.ID
    Ответ написан
    Комментировать
  • Как вытащить данные из таблицы по данным из where другой таблицы?

    WStanley
    @WStanley
    Back-end Developer
    У тебя написано
    SELECT *    # - выбрать все *(звездочка)
    FROM items    # - из таблицы items
    WHERE   # - где
    prise >   # - цена prise больше(пишется price правильно) 
    (			
       # Этот подзапрос вернет число которое сверяется с prise			
    	SELECT sell_prise   # - выбрать sell_prise (sell_priсe правильно)
    	FROM results    # - из таблицы results
    	WHERE items_id = 1  # - где items_id (в таблице results) = 1
    ) 
    AND id = 1;    # - и id (в таблице items ) = 1

    Что значит первую заменить на обращение ко второй?
    .
    Ответ написан
  • Что не так с кодом от парсинга(в конце кода приклепляю ошибки)?

    WStanley
    @WStanley
    Back-end Developer
    Кодировку указать просит
    with open(path, 'w', newline='', encoding='utf-8') as file:
    Ответ написан
    2 комментария
  • Как изменять значение integer через views?

    WStanley
    @WStanley
    Back-end Developer
    Что именно наддо то?
    from app_name.models import Profile
    
    profiles = Profile.objects.all()
    # получить
    for profile in profiles:
        print(profile.monetki)
    
    # присвоить
    profiles = Profile.objects.filter(monetki=0)
    for profile in profiles:
        profile.monetki = 25
        profile.save()
    Ответ написан
    Комментировать
  • Как связать модели в Django учитывая условия?

    WStanley
    @WStanley
    Back-end Developer
    Привет!
    Примерно так это должно работать
    ссылка на источник
    в admin.py
    @admin.register(Ordering)
    class OrderingAdmin(admin.ModelAdmin):
    
    	def formfield_for_foreignkey(self, db_field, request, **kwargs):
    	        if db_field.name == "system":
    	            kwargs["queryset"] = Code.objects.filter(used=True)
    	        return super().formfield_for_foreignkey(db_field, request, **kwargs)
    Ответ написан
    Комментировать
  • В каких случаях верстать кнопку через тэг 'a', в каких через тэг 'button'?

    WStanley
    @WStanley
    Back-end Developer
    Вот это на стороне клиента должно выглядеть одинаково)))
    <a src="" href="" class="btn">Кнопка</a>
    <button class="btn">Кнопка</button>

    А если надо просто ссылку то:
    <a src="" href="" class="link">Кнопка</a>
    Ответ написан
  • Почему выдает TemplateDoesNotExist at /?

    WStanley
    @WStanley
    Back-end Developer
    Путь добавить надо
    https://docs.djangoproject.com/en/3.0/ref/settings...
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [
                os.path.join(BASE_DIR, 'templates'),
            ],
    Ответ написан
    2 комментария
  • TemplateSyntaxError at. Как решить?

    WStanley
    @WStanley
    Back-end Developer
    Чтобы сделать тег доступным для всех шаблонов его надо прописать в settings
    TEMPLATES = [
        {
            'OPTIONS': {
                'builtins': [
                    'myprojectname.templatetags.somemodule',  # Пример
                    ...
                    'myprojectname.templatetags.blog_tags'  # Примерно так
                    ],
    Ответ написан
    6 комментариев
  • Как и куда добавить цели яндекс метрики на кнопки созданные через плагин WPBakery Page Builder?

    WStanley
    @WStanley
    Back-end Developer
    Можно добавить так
    В плагине можно добавить класс на кнопку
    <button class="myClick">Кнопка</button>
    И в файле js отловить событие нажатия кнопки
    только jquery должен быть подключен
    $(document).ready(function() {
    
        $('.myClick').click(function (event) {
            // сюда добавить фукнцию яндекс метрики
            yandex_function('номер')
        })
    });
    Ответ написан
    Комментировать
  • Почему не работает код?

    WStanley
    @WStanley
    Back-end Developer
    Отступы убери перед вызовом функции
    def say(message, times = 1):
        print(message * times)
    
    say('Привет')
    say('Мир', 5)
    Ответ написан
    1 комментарий
  • Как выгрузить group_concat-ом перечень id?

    WStanley
    @WStanley
    Back-end Developer
    В select добавить
    GROUP_CONCAT(A.ACTID)

    SELECT
        CASE WHEN P.PRODUCTID !=  '' THEN P.PRODUCTNAME WHEN L.LICENSEID !=  '' THEN L.NAME ELSE S.SERVICENAME END AS  PRODUCTNAME
    ,   CASE WHEN P.PRODUCTID !=  '' THEN 'product' WHEN L.LICENSEID !=  '' THEN 'license' ELSE 'service' END      AS  TYPE
    ,   SUM(INV.QUANTITY)                                                                                          AS  QUANTITY
    ,   SUM(INV.QUANTITY*INV.LISTPRICE*(1-COALESCE(INV.DISCOUNT_PERCENT, 0)/100)-COALESCE(INV.DISCOUNT_AMOUNT, 0))  AS  SUBTOTAL
    ,   GROUP_CONCAT(A.ACTID)
    FROM
        VTIGER_SP_ACT   A
    INNER JOIN
        VTIGER_CRMENTITY    E
    ON
        E.CRMID =   A.ACTID
    INNER JOIN
        VTIGER_INVENTORYPRODUCTREL  INV
    ON
        INV.ID  =   A.ACTID
    LEFT JOIN
        VTIGER_PRODUCTS P
    ON
        P.PRODUCTID =   INV.PRODUCTID
    LEFT JOIN
        VTIGER_SERVICE  S
    ON
        S.SERVICEID =   INV.PRODUCTID
    LEFT JOIN
        VTIGER_LICENSE  L
    ON
        L.LICENSEID =   INV.PRODUCTID
    WHERE
        E.DELETED           =       FALSE
    AND ACTDATE             BETWEEN '$from_date'    AND '$to_date'
    AND A.BRANCH_OR_AGENT   IN      ($branches)
    GROUP BY
        1
    ,   2
    Ответ написан
    5 комментариев
  • Почему не работает js в django?

    WStanley
    @WStanley
    Back-end Developer
    Uncaught TypeError: Cannot read property 'getContext' of null

    Insanus, в canvasBody вы получаете null, а у null нет свойства getContext
    const canvasBody = document.getElementById("canvas"),
    drawArea = canvasBody.getContext("2d");

    Вероятнее всего это потому, что элемента "canvas" в DOM еще не существует, а вы к нему обращаетесь, надо дождаться пока DOM сформируется ссылка1, ссылка2, ссылка3
    Либо подключите jquery и оберните код в: ссылка
    $( document ).ready(function() {
        console.log( "ready DOM" );
       // ваш код
    });

    Первое, что стоит попробовать это перенести подключение js кода ниже, но это врятли поможет, надо дождаться формирования DOM
    <canvas id="canvas"></canvas>
    
    <script src="{% static 'js/main.js' %}"></script>
    </body>
    </html>
    Ответ написан
    Комментировать
  • Как заставить выполнять скрипты toLoad?

    WStanley
    @WStanley
    Back-end Developer
    Alex Rave, а ну смотрите. Вы вешаете событие на элемент
    $('a').click
    Но, если вы этот элемент удаляете то и событие уходит с ним.
    Возможно вам подойдет вариант добавление события на динамические элементы
    $(document).ready(function() {
        $('.element').on('click', 'a', function(e){
            // .element - родительский общий элемент
            // ваши действия
        });
    });

    ссылка
    Либо вам надо заново вешать события на созданные элементы
    Ответ написан
    2 комментария
  • Как высчитать сумму из объектов?

    WStanley
    @WStanley
    Back-end Developer
    let data = [
     {name: 'product1', price: 200},
     {name: 'product2', price: 300}
    ]
    let summ = 0
    data.forEach(function(item) {
         summ += parseInt(item.price)
    })
    console.log(summ)
    Ответ написан
    Комментировать