Size: a a a

Django [ru] #STAY HOME

2021 February 08

ZY

Zhamshid Yussupov in Django [ru] #STAY HOME
I see
источник

CA

Chyngyz Akmatov in Django [ru] #STAY HOME
Думал телега глючит. Оказался ник)
источник

K

Kirill in Django [ru] #STAY HOME
Думал телефону хана. Я его пару дней назад придавил, пол экрана амоледа обесцветил - а тут как раз на той половине эта хрень...
источник

A

Alexander in Django [ru] #STAY HOME
Может, рекурсивный таск запустить с проверкой времени?
источник

СК

Сергей Корсаков... in Django [ru] #STAY HOME
It's magic😁 Я тоже думал телега уехала)
источник

NS

Nik S in Django [ru] #STAY HOME
Подскажите, как имея такую модель, посчитать(чтобы в конечном итоге отобразить) количество уникальных пользователей которые добавили продукт к себе в список избранных?
Чтото вроде лайков, только это не лайки, а списки избранных с заголовком, которых может быть не ограничено.
Ранее воевали на бумаги, нашли distinct(), но забыли про овраги.

class Wishlist(models.Model):
   user = models.ForeignKey('User', on_delete=models.CASCADE)
   title = models.CharField(max_length=128, unique=True)
   products = models.ManyToManyField('Product', blank=True)

Логика начинается с того, что прилетает id-продукта.
по Wishlist.objects.filter(products__id=1) получаем queryset где содержится данный продукт.
<QuerySet [<Wishlist: List2>, <Wishlist: List6>, <Wishlist: admin list>]> 3 обьекта - 2 пользователя, т.е. уникальных 2
А дальше возникают неприятности продолжить это в 1 запрос.
Wishlist.objects.filter(products__id=1).distinct('user')
Выдает ошибку django.db.utils.NotSupportedError: DISTINCT ON fields is not supported by this database backend
В итоге пока что  опять как у вас говорят, "г0внокодить" на циклах for - вручную все делать.
источник

FE

Friedrich Engels in Django [ru] #STAY HOME
база пг?
источник

NS

Nik S in Django [ru] #STAY HOME
sqlite)
источник

FE

Friedrich Engels in Django [ru] #STAY HOME
аминь
удачи
:D
источник

NS

Nik S in Django [ru] #STAY HOME
хорошо, а какие еще есть способы кроме
[x.user for x in Wishlist.objects.all()]
чтобы собрать значения конкретного поля в список из обьектов queryset-a?
источник

c

crawler in Django [ru] #STAY HOME
Nik S
хорошо, а какие еще есть способы кроме
[x.user for x in Wishlist.objects.all()]
чтобы собрать значения конкретного поля в список из обьектов queryset-a?
.values и .values_list
источник

NS

Nik S in Django [ru] #STAY HOME
crawler
.values и .values_list
Хорошая идея, немного продвинулся
>>> Wishlist.objects.filter(products__id=1).values_list('user', flat=True)
<QuerySet [2, 2, 1]>
источник

NS

Nik S in Django [ru] #STAY HOME
Wishlist.objects.filter(products__id=1).values_list('utilizator', flat=True).distinct()
<QuerySet [2, 1]>
типа как set() применили.
источник

c

crawler in Django [ru] #STAY HOME
Nik S
Wishlist.objects.filter(products__id=1).values_list('utilizator', flat=True).distinct()
<QuerySet [2, 1]>
типа как set() применили.
чего вам не хватает?
источник

NS

Nik S in Django [ru] #STAY HOME
crawler
чего вам не хватает?
спасибо, теперь вроде бы всего хватает:
Wishlist.objects.filter(products__id=1).values_list('user', flat=True).distinct().count()
2 == уникальные пользователи
values_list не хватало
источник

K

Kirill in Django [ru] #STAY HOME
Кто может подсказать, как написать в модели собственную валидацию для поля?
Стандартный флаг unique=True строит запрос   -   <UniqueValidator(queryset=CustomUser.objects.all())>
У меня необходимость учитывать регистр
источник

DK

Denis Kopitsa in Django [ru] #STAY HOME
Kirill
Кто может подсказать, как написать в модели собственную валидацию для поля?
Стандартный флаг unique=True строит запрос   -   <UniqueValidator(queryset=CustomUser.objects.all())>
У меня необходимость учитывать регистр
источник

K

Kirill in Django [ru] #STAY HOME
Я сразу в гугл полез, в документацию ума не хватило =)
источник

DK

Denis Kopitsa in Django [ru] #STAY HOME
только это не совсем валидация, это Constraint с условием на уровне БД будет, который выкинет исключение при попытке вставки.
можно сделать валидацию через clean_field которая будет срабатывать до вставки в базу
источник

NS

Nik S in Django [ru] #STAY HOME
crawler
чего вам не хватает?
А подскажите еще))
А куда посмотреть и в сторону чего подумать, чтобы автоматизировать генерацию поля unique_users вместо
products = Product.objects.all()
for product in products:
   product.unique_users = Wishlist.objects.filter(products__id=product.id).values_list('user', flat=True).distinct().count()
как-то сложно на уровне интеллекта получается...
Сам подумал - тут можно просто при добавление/удалении делать +/- 1.

А если - ?
wishlists = Wishlist.objects.filter(user_id=request.user.id)
for wishlist in wishlists:
       wishlist.products_ids = wishlist.products.values_list('id', flat=True)
 # [List]
В SQL базах данных вроде бы списки не хранятся?
Чем можно заменить поле состоящее из списка с id [1,45,12,18,15]? c целью в шаблонах мочь чекать {% if id in wishlist.products_ids  %} ?
источник