
Artem
17.04.2018
14:58:39
(SELECT U0."id" FROM "users_follow" U0 WHERE U0."follower_id" = ("users_user"."id") LIMIT 1) AS "following_cnt"
вот только на .count() не очень реагирует

Dan
17.04.2018
14:59:18

Artem
17.04.2018
14:59:27
надо каунтер в аннотации подзапроса

Google

Dude
17.04.2018
14:59:40
bind = models.ForeignKey(User, on_delete=models.CASCADE, related_name='extended')
print(x.extended) по related_name могу получить такое users.ModelForBlocking.None
users.ModelForBlocking.None
users.ModelForBlocking.None

Dan
17.04.2018
15:01:13
for x in users:
for z in x.extended.all():
print(z.campaign_id)

Dude
17.04.2018
15:01:18
Все, сделал
спасибо)

Artem
17.04.2018
15:02:58
вот на этом сыпется:
(SELECT COUNT(U0."id") AS "total" FROM "users_follow" U0 WHERE U0."follower_id" = ("users_user"."id") GROUP BY U0."id") AS "following_cnt"
ProgrammingError at /v1/users/me/
more than one row returned by a subquery used as an expression

Dan
17.04.2018
15:08:40

Artem
17.04.2018
15:08:46
Да

Dan
17.04.2018
15:08:55
ну правильно
указать явно user-а можно ?

Artem
17.04.2018
15:09:31

Dan
17.04.2018
15:10:29
.filter(user=user)

Google

Dan
17.04.2018
15:10:39
в подзапросе

Artem
17.04.2018
15:12:12
Ааа
(SELECT COUNT(*) AS "total" FROM "users_follow" U0 WHERE U0."follower_id" = 1 GROUP BY U0."id" LIMIT 1) AS "following_cnt",
даже лучше
вот только результат не верный
"followers": 1,
"following": null,
а фоловерс = 3!

Dan
17.04.2018
15:14:47
подзапрос пришли
попробуй до .filter(user
добавь .values('user')

Artem
17.04.2018
15:16:27
SELECT
"users_user"."id",
"users_user"."email",
(SELECT COUNT(*) AS "total"
FROM "users_follow" U0
WHERE U0."follower_id" = 1
GROUP BY U0."id"
LIMIT 1) AS "following_cnt",
(SELECT COUNT(*) AS "total"
FROM "users_follow" U0
WHERE U0."user_id" = 1
GROUP BY U0."id"
LIMIT 1) AS "follower_cnt"
FROM "users_user"
WHERE "users_user"."id" = 1;
вот чего получилось

Dan
17.04.2018
15:16:49
у тебя групирока не правильная
Follow .... и все такое пришли

Artem
17.04.2018
15:17:15
дааа, вот думаю
это и есть весь запрос
user = self.model.objects.annotate(
follower_cnt=Subquery(
Follow.objects.filter(user=user).
annotate(total=Count('*')).values('total')[:1]
),
following_cnt=Subquery(
Follow.objects.filter(follower=user).
annotate(total=Count('*')).values('total')[:1]
)
).get(pk=user.pk)

Dan
17.04.2018
15:18:02
ну не заставля перепечатывать с картинки =)
Follow.objects.values('user').filter(user=user).annotate(total=Count('*')).order_by().values('total')[:1]

Bogdan
17.04.2018
15:19:55
RawSql проще написать, если он на count() не реагирует. Вот это выше без пол-литра не поймешь

Artem
17.04.2018
15:20:19
воо, это уже ближе!
SELECT
"users_user"."id",
"users_user"."email",
(SELECT COUNT(*) AS "total"
FROM "users_follow" U0
WHERE U0."follower_id" = 1
GROUP BY U0."follower_id"
LIMIT 1) AS "following_cnt",
(SELECT COUNT(*) AS "total"
FROM "users_follow" U0
WHERE U0."user_id" = 1
GROUP BY U0."user_id"
LIMIT 1) AS "follower_cnt"
FROM "users_user"
WHERE "users_user"."id" = 1;
даже похоже на правду

Google

Artem
17.04.2018
15:21:34
и считает как есть в таблице

Dan
17.04.2018
15:23:59
команда админов с задачей справилась !!! =)

Artem
17.04.2018
15:24:18
и даже без пол литра)
спасибки :)

Dan
17.04.2018
15:24:28
кто как =)

Artem
17.04.2018
15:24:42
/me ушел за Sheridans!

Lazoreth
17.04.2018
15:28:24
Как обработать формсет если отправляешь его в zip?
Приходит ошибка, и нет валидации [{}, {'owner': ['Обязательное поле.'], 'auto': ['Обязательное поле.'], 'sim': ['Обязательное поле.'], 'controller': ['Обязательное поле.']}]
Хотя если форму в консоль печатать там все айдишники есть, и если форма одна идёт то всё ок работает
Как вообще правильно сделать формсет с N колличеством моделей на странице?

Anton
17.04.2018
16:30:58
Вопрос в духе "погадайте на кофейной чаше", но информации и правда мало, так что даже общий совет будет полезен.
Запускаю проект на лкоалке через runserver, хожу по страницам, но на одной из них сайт внезапно совсем ложится, даже в терминале сбрасывается задача. В последней строке трейсбека просто написано "Аварийное завершение". Трейсбек такой:
https://pastebin.com/bWDxj2WQ

Dan
17.04.2018
16:37:02

Anton
17.04.2018
16:37:34
Вьюха не моя, из пакета wagtail прилагается как часть админки
Не знаю, где она, но сейчас поищу

Dan
17.04.2018
16:38:25
Меня смущает from stack overflow
И там какая то фигня с сокетами

Anton
17.04.2018
16:39:05
что смущает?
Да, там другой специалист сделал настройку с расчетом на использование в докере
Но какие конкретно настройки - без понятия, я разницу увидел только в переменной databases

Dan
17.04.2018
16:41:53
что смущает?
'Fatal Python error: Cannot recover from stack overflow'

Google

Lazoreth
17.04.2018
16:47:19
Почему вьюха не отлавливает исключение?
def test(request, client_id):
cars = get_list_or_404(Car.objects.filter(owner=client_id))
client = get_object_or_404(Client, pk=client_id)
TestFormset = CarsFormSet(queryset=Car.objects.filter(owner=client_id))
if request.method == 'POST':
try:
TestFormset = CarsFormSet(request.POST, queryset=Car.objects.filter(owner=client_id))
except ValidationError:
print("TEST")
TestFormset = None
if TestFormset and TestFormset.is_valid():
print(TestFormset.cleaned_data)
else:
TestFormset = CarsFormSet(queryset=Car.objects.filter(owner=client_id))
TestFormset = zip(cars, TestFormset)
return render(request, 'billing/test.html', {'cars':cars, 'client':client, 'formset':TestFormset})

Dan
17.04.2018
16:50:47

Lazoreth
17.04.2018
16:51:04
Точно, щас глянул он его после if выбрасывает

Dan
17.04.2018
16:51:10
Исключение и не должно быть

Lazoreth
17.04.2018
16:51:29
Там кастомную валидацию надо делать, да? Данные приходят но не валидируются https://i.imgur.com/qkuNKpU.png

Dan
17.04.2018
16:51:35
Во первых не вызова is_valid

Lazoreth
17.04.2018
16:53:24
Мне не понятно почему валидация не происходит. Если без зипа делать то всё ок
Но без зипа данные не вывести нормально

Серёга
17.04.2018
17:03:01
а как селери таски дебажить? принты ведь не выводит в консоль...

amureki
17.04.2018
17:04:39

Dan
17.04.2018
17:05:00

amureki
17.04.2018
17:05:11
Ну и можно eager mode прописать, тогда таски синхронно будут пускаться

Eugene
17.04.2018
17:05:41
?все не могу себя заставить понять как селери таски тестить

Dan
17.04.2018
17:06:53
Для тестирования можно включить синхроный мод
И дебажить принтами и логами

Bogdan
17.04.2018
17:28:57
Можно делать task.run() и тогда это будет обычный вызов функции, который можно во вьюху запихнуть

Игорь
17.04.2018
18:05:52
Товарищи, а как лучше всего переключить селери в джанго тестах на тестовую базу?

Google

Дмитрий
17.04.2018
18:26:18
Мы похожи на тех кто будет за копейки таскаться хрен пойми куда?

Владимир
17.04.2018
18:26:26
о, закладки делать за 50к в неделю кто хочет?

Дмитрий
17.04.2018
18:27:26
Ааа наркаманы

Alex
17.04.2018
18:31:40
блокировка телеграмма помешала нам гнать караваны из Пакистана, талибы с полей и просто террористы омрачены

Alex
17.04.2018
18:37:41
Народ, подскажите по админке, есть ли способ отображать поля модели таблично в главной модели(ModelAdmin), так же просто как это сделано для связанных моделей (наследовался от TabularInline и попивай чаек спокойно)

amureki
17.04.2018
18:37:57

Игорь
17.04.2018
18:39:33
У меня отдельный файл для неё сделан, но суть не в этом. Когда запускаются асинхронные таски, которые я создаю в тестах, они запрашивают реальную базу, когда код таска обращается к моделям
Переключение на синхронный мод не вариант, а как правильно настроить тест моками или другими инструментами чёт пока не догоняю

amureki
17.04.2018
18:41:44

Игорь
17.04.2018
18:42:11
Eager mode
The eager mode enabled by the task_always_eager setting is by definition not suitable for unit tests.
When testing with eager mode you are only testing an emulation of what happens in a worker, and there are many discrepancies between the emulation and what happens in reality.
Офф доки

amureki
17.04.2018
18:43:18

Игорь
17.04.2018
18:48:39
Скажем так, добавляю функционал в проекте и хотелось бы не идти в разрез с последней документацией. Пока проблем нет, но не хотелось бы самому потом искать эти грабли. К тому же сам подход к тестированию, максимально приближенному к тому, что происходит на продакшене мне изначально кажется более надежным

amureki
17.04.2018
19:00:49

Игорь
17.04.2018
19:01:27
Кода под рукой сейчас нет, не могу посмотреть

amureki
17.04.2018
19:02:00
¯\_(ツ)_/¯
Когда получится - конфиги в студию

Евгений
17.04.2018
19:15:49
Народ, прошу прощения за глупый вопрос, но хоть убейте не пойму. Хочу в __str__ модели вывести первую букву имени покупателя: self.customer_name[0]. Поле с именем models.CharField, а вылетаю с IndexError. string index out of range. Что не так то? Строка ведь...