170 похожих чатов

Я использую pydantic, есть 2 класса: User и Clan, вот

как они выглядят: [https://gist.github.com/bim-ba/22c2327b256942d996afb8b91170639b#file-models-py]
Нужно их инициализировать, но проблема в том что они перекрестные.

Детали:
API по пути /api/clans/uid отдает JSON примерно следующего вида (допустим я обратился к `/api/clans/13`): [https://gist.github.com/bim-ba/22c2327b256942d996afb8b91170639b#file-apiclans-json]
API по пути /api/players/uid отдает JSON примерно следующего вида (допустим я обратился к `/api/players/444`): [https://gist.github.com/bim-ba/22c2327b256942d996afb8b91170639b#file-apiuser-json]

Например:
Я делаю запрос /api/clans/13 и получаю вот такой ответ:
[https://gist.github.com/bim-ba/22c2327b256942d996afb8b91170639b#file-apiclans-json]
[https://gist.github.com/bim-ba/22c2327b256942d996afb8b91170639b#file-main-py]
Можно заметить что API хоть и отдал информацию по каждому пользователю в клане, но отдал он эту информацию частично, ведь мы явно видим что отсутствуют поля bio и clan для всех пользователей. Из-за того что API отдает такую неполную информацию по пользователям, я не могу инициализировать массив users в классе Clans. Тогда, чтобы сделать так, чтобы инфа была полная и каждого пользователя можно было инициализировать, необходимо запрашивать у API полную инфу по каждому пользователю в клане, то есть для моего примера я бы делал еще 3 запроса (`/api/players/444`, /api/players/1, `/api/players/4`), и только тогда, уже получив полную информацию о каждом пользователе я бы стал их инициализировать.

Но тут же встает вторая проблема: как мне инициализировать поле clan у каждого пользователя, если сам клан еще не инициализирован до конца? Можно ли сделать какую-нибудь ссылку/указатель на неинициализированный клан? (я знаю что в python нет указателей, но может получится что то сделать с ForwardRef из typing?)

Вопросы:
1. Как сделать так, чтобы при инициализации массива users в классе Clans, сначала шел бы запрос к API по этому пользователю, из полученных данных создавался новый объект User со ссылкой на текущий клан (который не инициализирован до конца)?
2. Как это можно реализовать с помощью pydantic? У меня была идея с валидаторами (`@validator`)[https://gist.github.com/bim-ba/22c2327b256942d996afb8b91170639b#file-possible-py], но там бросается исключение ConfigError как раз таки из-за того, что я пытаюсь инициализировать clan не до конца инициализированным кланом (в котором отсутствует массив `users`)?

Короче говоря:
Мне нужно создать объект Clan, который содержит в себе массив пользоваталей, а каждый пользователь в свою очередь ссылается на этот клан (то есть возникает проблема что я не могу инициализировать объекты неполными объектами)

5 ответов

13 просмотров

Ты же понимаешь, что циклические структуры ты из апишки не вернёшь?

а можно TL;DR версию?

Форвард реф создаётся автоматом когда ты в кавычках указываешь

Tishka17
Форвард реф создаётся автоматом когда ты в кавычка...

разве? мне казалось там его надо еще дополнительно инициализировать?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта