Django Приложение, развернутое в Heroku - psycopg2.errors.NotNullViolation, поскольку данные не передаются через Ajax - PullRequest
0 голосов
/ 17 апреля 2020

Я успешно развернул свое приложение в Heroku, но одна функция не работает должным образом, хотя она хорошо работает в моей локальной среде. Из журналов Heroku я вижу следующее:

2020-04-17T09:50:34.538062+00:00 app[web.1]: Internal Server Error: /shop/add_to_cart/11/
2020-04-17T09:50:34.538078+00:00 app[web.1]: Traceback (most recent call last):
2020-04-17T09:50:34.538079+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 86, in _execute
2020-04-17T09:50:34.538079+00:00 app[web.1]: return self.cursor.execute(sql, params)
2020-04-17T09:50:34.538080+00:00 app[web.1]: psycopg2.errors.NotNullViolation: null value in column "quantity" violates not-null constraint
2020-04-17T09:50:34.538081+00:00 app[web.1]: DETAIL:  Failing row contains (23, null, null, 23, 11).

Указанное количество пропускается через ajax:

$('.add-product-to-cart').on('click', function (e) {
    e.preventDefault();
    let product_id = $(this).attr('data-product-id');
    let quantity = $('#input-product' + product_id).val();
    let csrftoken = $('input[name=csrfmiddlewaretoken]').val();

    $.ajax({
        url: 'add_to_cart/' + product_id + '/',
        type: 'POST',
        data: {
            'product_id': product_id,
            'qty': quantity,
            'csrfmiddlewaretoken': csrftoken,
            },
        success: function (data) {
            alert("Produkt dodany");
        }

        });
    });

Опять этот код работает на локальном. Бит html, к которому относится ajax, приведен ниже:

<div class="bottom-area d-flex px-1">
    <div class="m-auto w-100">
        <form method="POST" action="{% url 'shop:add_to_cart' product.id %}"
              class="d-flex align-items-center justify-content-center"
                    id="add-product-to-cart-form">
            {% csrf_token %}
            <div class="d-flex align-items-center justify-content-start pr-2">
                <input type="number" name="qty"
                       id="input-product{{ product.id }}"
                       class="quantity input-number py-0"
                       value="{{ product.min_qty_value }}"
                       min="{{ product.min_qty_value }}"
                       max="500"
                       step="{{ product.min_qty_value }}"
                       style="padding: 0 0 0 10px; border-radius: 4px;
                              border: 1px solid black; width: 70px">
                <p class="mb-0 pl-1 price">
                    {{ product.get_min_qty_info_display }}
                </p>
            </div>
            <button type="submit" style="border-radius: 4px;background: #82ae46; border: none"
                    data-product-id="{{ product.id }}"
                    class="add-product-to-cart">
                <span><i class="ion-ios-cart" style="color: white"></i></span>
            </button>
        </form>
    </div>
</div>

Есть ли у вас какие-либо идеи, почему нулевое значение передается только в моем приложении Heroku (а не в локальном), когда я нажимаю кнопку формы? Любая помощь по отладке будет признательна.

1 Ответ

0 голосов
/ 17 апреля 2020

Кажется, мне нужно было разместить вопрос здесь, чтобы понять это. Решением было сделать команду CLI . Я не связывал точки, так как раньше настраивал таблицы, но они не перезапускались на таблицах heroku postgre! Надеюсь, это все равно кому-нибудь поможет.

...