@pydjango

Страница 1188 из 1273
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
https://pastebin.com/i6qKmcEZ
та у тебя у user-а нет FK

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

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})

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
а как селери таски дебажить? принты ведь не выводит в консоль...
В логи воркера выводит, если прописать аргумент воркеру

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
У меня отдельный файл для неё сделан, но суть не в этом. Когда запускаются асинхронные таски, которые я создаю в тестах, они запрашивают реальную базу, когда код таска обращается к моделям
В отдельном твоём файле указана DATABASES настройка? Если да, её она использует Либо ты что-то не так объясняешь в своей проблеме Второй вопрос, почему eager mode не вариант?

Игорь
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
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.
Так, и какие проблемы ты встречал с этим? Мне интересно Я не особо сталкивался (за исключением ситуаций когда логика запутался и таски перекликаются)

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

Игорь
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. Что не так то? Строка ведь...

Страница 1188 из 1273