Найти - Пользователи
Полная версия: Динамические модели: правильно или нет
Начало » Django » Динамические модели: правильно или нет
1 2 3
to_night
Добрый день.

Есть словарь, из него на лету создаются модели:

test_dict = {'Ham': [['count', models.IntegerField()]], 'Jam': [['weight', models.IntegerField()], ['manufacture date', models.DateField()]]}
models_list = []
for key, value in test_dict.iteritems():
    #  Models construct.
    models_list.append(type(key, (models.Model,), {'__module__': __name__}))
    for item in value:
        for model in models_list:
            if model.__name__ == key:
                #  Add fields.
                model.add_to_class(item[0], item[1])
                try:
                    admin.site.register(model)
                except AlreadyRegistered:
                    pass

А потом таблицы:

BEGIN;
CREATE TABLE "rooms_and_users_jam" (
    "id" integer NOT NULL PRIMARY KEY,
    "weight" integer NOT NULL,
    "manufacture date" date NOT NULL
)
;
CREATE TABLE "rooms_and_users_ham" (
    "id" integer NOT NULL PRIMARY KEY,
    "count" integer NOT NULL
)
;
COMMIT;

В админке все ок.

Проблема. Мой код выглядит очень простым. Так как раньше ничего подобного не делал, не могу понять, где тут подводные камни. Попинайте.

FishHook
А какова область применения сего?
to_night
FishHook
А какова область применения сего?

Сферическая в вакууме. Задача из тестового задания, ставшая уже бояном. Делаю ради интереса (что такое, с чем едят). Просто видел у людей намного более сложные решения сей задачи. Я сделал просто. так как опыта мало, не знаю, насколько правильно.

Динамические модели, как пишут тут: http://www.slideshare.net/schacki/django-dynamic-models20130502, можно использовать, к примеру, для создания пользовательских полей в CMS.
FishHook
to_night
как пишут тут
Там пишут про EAV, а вообще совсем не про то, чтобы создавать классы моделей во время исполнения.
Может быть Вы задание неправильно поняли?
to_night
FishHook
Может быть Вы задание неправильно поняли?

Может быть.
1) Приложение должно уметь динамически создавать классы моделей в памяти,
используя текстовое описание моделей (например, из xml (или yaml) файла), должны
поддерживаться типы char, int, date.
2) Таблицы в бд надо создать стандартными средствами django (syncdb), для изменения
необходимо использовать south (в консоли, если модели правильно созданы, то syncdb и
south их подхватывают);
3) Для этих таблиц должно быть доступно редактирование в админке django;

Вроде все так, только я из yaml файла получил словарь.
nnmware
Дайте-ка угадаю. Это компания Смит продолжает всех терзать тестовым заданием третий год.
Раньше они на фриланс.ру расписывали как им требуются “питонщики”, но достав весь СНГ, теперь они постят предложения работы на Odesk.
Вы лучше не связывайтесь, а то будет как у меня, сначала они письмо потеряли, потом времени у крутых программеров Смита не было посмотреть, потом еще что-нибудь. А потом им не понравится что они тупят пару недель и теряют письма, и они заявят Вам что код, скопированный из джанго и соуса неопрятен.
Господин Долбунов полностью оправдывает свою фамилию.

А про динамические модели- ловите. https://github.com/nnmware/testwork
Может сделаете более опрятно и глядишь Ваше письмо не прое… потеряют

ЗЫ. Не написал бы это, если бы не столкнулся с таким свинским неуважением к чужому времени и работе. “Письма теряются, времени нет, все говно а мы Дартаньяны”.

ЗЫЗЫ: Касаемо изначальной темы топика- у Вас SQL не создается динамически, а в задании об этом была речь + требуется учитывать миграции, чтобы при изменении данных в yaml файле корректно добавлялись новые поля и удалялись ненужны.
to_night
nnmware
Может сделаете более опрятно и глядишь Ваше письмо не прое… потеряют
Делать в расчете на ‘авось’… ну уж нет. Есть много других полезных задач. А за код спасибо.
Dolbunov
Здравствуйте nnmware,

Я - Дмитрий Долбунов. Мне сотрудники скинули ссылку, постараюсь ответить на ваши вопросы.

Да, мы компания smyt.ru. Да, мы ищем разработчиков в связи с расширением. Вообще, хороших разработчиков найти сложно, поэтому мы ищем постоянно.

Иногда мы долго отвечаем, т.к. сильно заняты. Я прошу за это прощения у вас. Также я хочу поблагодарить вас за ваше потраченное на нас время.

“Письма теряются, времени нет, все говно а мы Дартаньяны”. - Нет, мы так не думаем. Мне жаль, что так получилось и то, что вы нам не подошли. Просто у нас очень высокие требования к культуре разработки и разработчиков. Также мы не считаем людей, которые делают наше тестовое задание, “говном”, даже если оно сделано неверно.

nnmware, я отправил ссылку своему техдиру на код тестового задания, который лежит у вас в репе. Мы еще раз посмотрим ваш результат и более подробно напишем, почему ваш код показался нам недостаточно качественным.

PS. Да, давно пора придумать новое тестовое задание. ))
nnmware
По прошествии двух лет с момента выполнения тестового задания мне уже, как и Вам, глубоко безразлично, что там Ваш техдир думает про мой код.
К тому же он не особо и мой, все было основано на http://dynamic-models.readthedocs.org/en/latest/
Разобраться да, пришлось с нуля, бросив все дела, ведь такое красивое задание было “блаблабла, да оно на сообразительность”. Думал ребята серьезные.
А у серьезных ребят полторы недели не было 10 минут глянуть, а потом только и промычали “Ну да..задание верно, но неряшливо, pep8 не соблюден”. Cел как идиот сразу же, 10 часов грохнул коту под хвост, запушил, любопытно что скажут, ведь чай и другие кандидаты делают, сравнить бы подход, скорость. Проблема что пожалел еще 5 минут, чтобы пробелы в нужных местах удалить или добавить. Задание-то не на сообразительность оказалось, а на правописание.
Так что про высокие требования- вон индусам на ODESK рассказывайте, ибо последний месяц вакансия уже раз 15 повторяется, хоть бы убивали старые чтоли для приличия. 15 вакансий, percent hiring - 0.

Всего хорошего.


Singularity
Dolbunov
ложь и провокация
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB