Size: a a a

Django [ru] #STAY HOME

2020 September 03

DB

Dima Boger in Django [ru] #STAY HOME
Уточни, тебе для каждого запроса?
источник

М

Максим in Django [ru] #STAY HOME
Вопрос для тех кто разбирается в redis, мне нужно создать в нем многоуровневую систему данных, должно получится что-то подобное:
{
   lev1: {
       lev2: {
           lev3: {
               prop1: str
               prop2: set(val1, val2, val3)
               prop3: set(val1, val2, val3)
           },
           ...
       },
       ...
   },
   ...
}

на данный момент с помощью библиотеки redisworks у меня почти получилось, вот только он не хочет сохранять вложенные множества. Eсли заменить
prop2: set(val1, val2, val3)
prop3: set(val1, val2, val3)

на:
prop2: [val1, val2, val3]
prop3: [val1, val2, val3]

то все работает, а иначе появляется ошибка:
TypeError: Object of type set is not JSON serializable

есть у кого совет как мне с этой задачей справиться?
источник

AD

Ali Dulatov in Django [ru] #STAY HOME
Значит как работало и для чего использовалось - Application - on_start- запуск всего web приложения. Туда обычно запихивали коннекшн (неактуально), конфигурацию (есть в Django свое), инициализация переменных в памяти, которые видны везде в рамках приложения. Счетчики какие нибудь, еще чего... ON_END - когда web приложение останавливается мирным способом. Сотвественно можно при этом все закрыть, что надо сохранить. Все тоже самое на уровне сессий, но переменные видны только в сессии. Вопрос - хочется похожее, чтобы инициализировать переменные в памяти. Или есть другие механизмы?
источник

VK

Valentin Komarov in Django [ru] #STAY HOME
Dan Tyan
анотация работает с queryset
после создания сериализируется объект
Если мы делаем Model.objects.get(id=object_id), то объект все равно имеет аннотированные поля
источник

DT

Dan Tyan in Django [ru] #STAY HOME
Model.objects.annotate(...).get(id=object_id) так ?
источник

ss

san_ sarabat in Django [ru] #STAY HOME
У меня есть сайт с юзерами и мне надо поключить ЦМСку к нему. Джанго ЦМС норм тема или есть другие получше?
источник

VK

Valentin Komarov in Django [ru] #STAY HOME
Dan Tyan
Model.objects.annotate(...).get(id=object_id) так ?
Нет, просто Model.objects.get(id=object_id)
(с учетом того, что objects = кастомный менеджер, в котором переопределен get_queryset, в котором происходит queryset = queryset.annotate(…))
источник

ZN

Zhumakhan Nazir in Django [ru] #STAY HOME
Valentin Komarov
Нет, просто Model.objects.get(id=object_id)
(с учетом того, что objects = кастомный менеджер, в котором переопределен get_queryset, в котором происходит queryset = queryset.annotate(…))
а как в сериалайзере опрелен метод create?
источник

VK

Valentin Komarov in Django [ru] #STAY HOME
Zhumakhan Nazir
а как в сериалайзере опрелен метод create?
Никак, ModelSerializer
источник

ZN

Zhumakhan Nazir in Django [ru] #STAY HOME
думаю там можно вызвать вот это Model.objects.get(id=object_id)
источник

ZN

Zhumakhan Nazir in Django [ru] #STAY HOME
и возвращать его
источник

VK

Valentin Komarov in Django [ru] #STAY HOME
Zhumakhan Nazir
думаю там можно вызвать вот это Model.objects.get(id=object_id)
Ну это и есть - второй хит в базу на каждый create (что не кажется каким-то красивым решением)
источник

ZN

Zhumakhan Nazir in Django [ru] #STAY HOME
INSERT INTO users (firstname, lastname) VALUES ('Joe', 'Cool') RETURNING id;
источник

ZN

Zhumakhan Nazir in Django [ru] #STAY HOME
можно написать что то в этом роде
источник

VD

Vitaliy Derbentsev in Django [ru] #STAY HOME
Valentin Komarov
Привет! Недавно узнал, что после POST запроса на ModelViewSet, инстанс, который создается, не содержит аннотированных полей, которые я ему добавил в менеджере через оверрайд get_queryset метода. Из-за этого, мы не можем сериализовать объект, если сериалайзер требует аннотированные поля. Кто-нибудь сталкивался с таким и как лучше это решить? Можно конечно, запросить инстанс заново из базы, но как-то делать дополнительный запрос на каждое создание не хочется.
Логично. Джанга не занимается вычислением аннотаций, она поручает это базе. Скажем, в аннотации мы попросили просуммировать какое-то поле таблицы по всем записям - откуда джанге знать, какие записи в этой таблице лежат и чему у них равно это поле? Поэтому сначала добавляем в таблицу запись, а уже после просим базу посчитать нужные нам значения по актуальным данным.
Если же у вас никаких агрегатных функций не используется, а значение можно получить исходя из самого экземпляра модели, то создайте в модели свойство (property), которое будет проводить вычисление, и не напрягайте базу без надобности.
В некоторых случаях можно скомбинировать, храня в разделяемой потоками памяти актуальные агрегатные значения и вычисляя при каждой записи в базу, и выбирать их через свойство модели. Но нужно позаботиться о первичной инициализации после запуска.
источник

Z

Zakhar in Django [ru] #STAY HOME
Добрый день!

Не сталкивались с такой ошибкой?
Access to XMLHttpRequest at 'https://api.privet-obed.ru/users/user/28/detail_information/' from origin 'http://lk.privet-obed.ru' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

В каких то промежутках проскакивает, не могу понять откуда
источник

D

Dmitry in Django [ru] #STAY HOME
Zakhar
Добрый день!

Не сталкивались с такой ошибкой?
Access to XMLHttpRequest at 'https://api.privet-obed.ru/users/user/28/detail_information/' from origin 'http://lk.privet-obed.ru' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

В каких то промежутках проскакивает, не могу понять откуда
CORS настройте
источник

Z

Zakhar in Django [ru] #STAY HOME
Dmitry
CORS настройте
У меня в настройках стоит
CORS_ORIGIN_ALLOW_ALL = True
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Zakhar
У меня в настройках стоит
CORS_ORIGIN_ALLOW_ALL = True
мидлварь добавил?
источник

Z

Zakhar in Django [ru] #STAY HOME
Не выходи из комнаты.
мидлварь добавил?
да, 'corsheaders.middleware.CorsMiddleware'

что то еще вписать надо?
источник