I had to implement dynamic models for our project.

In the end we represented them in four django models, two for the
"virtual models" and its fields and two for the actual data

We used the django model system for these four base classes, but the
"virtual models" on top of them were custom (so no django orm, all
queries included joins, etc etc)

Our solution to that was to index the important data in ElasticSearch
and execute the queries there

Pros:
- Completely dynamic
- Does not depend on metaprogramming or Django's models
- Querying via ElasticSearch is not so bad and is quite fast

Cons:
- Quite slow when you need to update data in the database
- No ORM unless you implement it
- You have to be careful keeping the index entries updated when needed
- Limited to basic data types (int, char, decimal, date, file)
- No DB integrity checks

On 1/5/17, Guilherme Leal <lealhu...@gmail.com> wrote:
> I know metaclasses, and i know that the django models uses some "meta class
> magic" to register the models on the model cache.
> I gess i need to test the implication of refreshing the model cache on the
> fly, since it doesn't have a "natural" way to refresh itself.
>
> 2017-01-05 14:05 GMT-02:00 Avraham Serour <tovm...@gmail.com>:
>
>> you should read about metaclasses, basically it enables you to build
>> class
>> definitions in runtime.
>>
>> http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python
>>
>>
>> On Thu, Jan 5, 2017 at 6:02 PM, Guilherme Leal <lealhu...@gmail.com>
>> wrote:
>>
>>> The "migrations on the fly" thing dont get to be a problem (since I gess
>>> we could call the migrations api to generate the migration).
>>> My concenrs would be contructing and refreshing the model cache (I say
>>> the "model cache" like the list accessed through
>>> django.apps.get_models()
>>> ), and the OBVIOUS performance issues that could be generated.
>>>
>>> Anyway, EVEN if it turns out to be impratical to production, i want to
>>> build it as a proof of concept, and see where it can go, so any help or
>>> ideias would be apreciated!
>>>
>>> 2017-01-05 13:52 GMT-02:00 Beautifulloop <darahs...@gmail.com>:
>>>
>>>> I think you just need to define a generic model. I dont see how what
>>>> you
>>>> are asking is feasible since it would require that (on the fly that
>>>> migrations are made). You can write a generic model where the types can
>>>> be
>>>> represented by a field name.
>>>>
>>>>
>>>> On Thursday, 5 January 2017 17:33:07 UTC+2, Guilherme Leal wrote:
>>>>>
>>>>> My idea was to build an user interface for the model definition, so
>>>>> the
>>>>> developer (or in this case, the user) could define the model using a
>>>>> register form.
>>>>>
>>>>> Like a user interface to define the model layer, I gess.
>>>>>
>>>>> 2017-01-05 12:34 GMT-02:00 Avraham Serour <tov...@gmail.com>:
>>>>>
>>>>>> I guess you could play with metaclasses and generate the class
>>>>>> definition on runtime using information from the database
>>>>>>
>>>>>> But why? You can save the model definition on files, why saving them
>>>>>> to database and complicate your life?
>>>>>>
>>>>>> On Wed, Jan 4, 2017 at 10:38 PM, Guilherme Leal <leal...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Is there a way to populate Django model cache on the fly?
>>>>>>> I was thinking about saving the model definition on some backend
>>>>>>> (database for instance) and loading as needed. This way we can
>>>>>>> basically
>>>>>>> build a custom admin interface for the model definitions, and load
>>>>>>> the
>>>>>>> models (through "type()" or something similar) into the cache "on the
>>>>>>> fly".
>>>>>>>
>>>>>>> Guilherme Leal
>>>>>>>
>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "Django users" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to django-users...@googlegroups.com.
>>>>>>> To post to this group, send email to django...@googlegroups.com.
>>>>>>> Visit this group at https://groups.google.com/group/django-users.
>>>>>>> To view this discussion on the web visit
>>>>>>> https://groups.google.com/d/msgid/django-users/CAOs3Lp7_R4RK
>>>>>>> %3DVconoQ1W6rzK8xYaiVJX-FHtyZ3Cxg4MmbOow%40mail.gmail.com
>>>>>>> <https://groups.google.com/d/msgid/django-users/CAOs3Lp7_R4RK%3DVconoQ1W6rzK8xYaiVJX-FHtyZ3Cxg4MmbOow%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>> .
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Django users" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send
>>>>>> an email to django-users...@googlegroups.com.
>>>>>> To post to this group, send email to django...@googlegroups.com.
>>>>>> Visit this group at https://groups.google.com/group/django-users.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/django-users/CAFWa6t%2B5DO
>>>>>> 5u8p5fRrGAGkW1KYR2DZxc_wtkNQG7bX3u6v7JuA%40mail.gmail.com
>>>>>> <https://groups.google.com/d/msgid/django-users/CAFWa6t%2B5DO5u8p5fRrGAGkW1KYR2DZxc_wtkNQG7bX3u6v7JuA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Django users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to django-users+unsubscr...@googlegroups.com.
>>>> To post to this group, send email to django-users@googlegroups.com.
>>>> Visit this group at https://groups.google.com/group/django-users.
>>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>>> gid/django-users/e00f8c04-8c97-4827-9555-e155c4afd20a%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/django-users/e00f8c04-8c97-4827-9555-e155c4afd20a%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups
>>> "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an
>>> email to django-users+unsubscr...@googlegroups.com.
>>> To post to this group, send email to django-users@googlegroups.com.
>>> Visit this group at https://groups.google.com/group/django-users.
>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>> gid/django-users/CAOs3Lp5V2Le%3DJWbSSp_%2B%2BsXK4KaN_3rB7-BV
>>> Hk6OSE8SgKoYFw%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/django-users/CAOs3Lp5V2Le%3DJWbSSp_%2B%2BsXK4KaN_3rB7-BVHk6OSE8SgKoYFw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to django-users+unsubscr...@googlegroups.com.
>> To post to this group, send email to django-users@googlegroups.com.
>> Visit this group at https://groups.google.com/group/django-users.
>> To view this discussion on the web visit https://groups.google.com/d/
>> msgid/django-users/CAFWa6tKZcZLQ1BL7YhEqJpmmkv-
>> KLoxcRiMyMaTHsu7s3%2BA5%3DA%40mail.gmail.com
>> <https://groups.google.com/d/msgid/django-users/CAFWa6tKZcZLQ1BL7YhEqJpmmkv-KLoxcRiMyMaTHsu7s3%2BA5%3DA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to django-users+unsubscr...@googlegroups.com.
> To post to this group, send email to django-users@googlegroups.com.
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CAOs3Lp6CPMUMAJfeRQFw0ihV7Ve3ggTWW0rL%3D4Q_V50bf4QEOA%40mail.gmail.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CALn3ei3VYWEjK02v9yd13NPk_cFn7x1RAHhT3yyiq_J4azX-jg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to