<VirtualHost dt.dev>
ServerName dt.dev
ServerAlias www.dt.dev
<VirtualHost ez.dev>
ServerName www.ez.dev
ServerAlias ez.dev
127.0.0.1 ez.dev
127.0.0.1 www.ez.dev
127.0.0.1 dt.dev
127.0.0.1 www.dt.dev
сategories = Category.objects.filter(
product__price__gte=100
).prefetch_related(
Prefetch('product_set', queryset=Product.objects.filter(price__gte=100))
).distinct('id')
for category in сategories:
products = category.product_set.all()
print(category.name, len(products), products)
хотя бы работоспособность этой базыЭто уже лучше.
js-form
для всех форм, использующих этот сценарий, а так же js-phone
для всех полей для ввода телефона.$(document).ready(function() {
"use strict";
var form = $(".js-form");
form.on("submit", function(e) {
var submit = form.find(".js-submit");
// Если Вам приходится генерировать HTML
// или модифицировать какие-либо текстовые значения,
// всегда лучше вынести их в константы
var SEND = "Отправить заявку";
var SENDING = "Идет отправка...";
var SENDING_COMPLETE = "Заявка отправлена";
function validatePhone() {
var phone = form.find(".js-phone");
try {
if (phone.val().length === 0) {
throw Error("Phone number can't be empty");
}
} catch (e) {
phone.css({
"border-color": "#ff4500"
});
setTimeout(function() {
// Возвращаем значение цвета обводки в
// предыдущее состояние
phone.css({
"border-color": "auto"
});
}, 500);
return false;
}
return true;
}
if (validatePhone() === true) {
var request = $.ajax({
url: "send.php",
method: "POST",
beforeSend: function() {
submit.attr({
"disabled": true,
"value": SENDING
});
}
});
request.done(function(response) {
response = $.trim(response);
if (response === "sent") {
submit.attr({
"value": SENDING_COMPLETE
// Возможно, здесь стоит убрать флаг disabled?
});
} else {
// По идее, если что-то идет не так, Ваш скрипт должен
// выкидывать исключение, которое вы бы обрабатывали в
// методе fail. Но пока вы этого не сделали, придется писать через
// if-else
submit.attr({
"disabled": false,
"value": SEND
});
}
});
request.fail(function(error) {
// Когда PHP скрипт будет выкидывать ошибку, вы будете обрабатывать её здесь.
console.error(error);
});
}
// Предотвращаем стандартную обработку форму
e.preventDefault();
});
});