Or there's overriding the metaclass...

On Mon, Dec 7, 2009 at 12:39 PM, Bill Freeman <ke1g...@gmail.com> wrote:
> Hmmm.  Probably just as ugly, and untested, but:
>
> class A(basemodel):
>    for o in range(MAXNUMREDPORTS):
>         for i in (1,2):
>             locals()["Port%d_redfield%d" % (o+1, i)] = models.FloatField()
> ...
>
> On Mon, Dec 7, 2009 at 12:10 PM, Daniel Goertzen
> <daniel.goert...@gmail.com> wrote:
>> Okay, I explored model generation a bit and found an approach that wasn't
>> too offensive.  For those that are trying to solve the same problem that I
>> am, here is what I came up with:
>>
>> def red_port(prefix):
>>    return """
>> %(prefix)sredfield1 = models.FloatField()
>> %(prefix)sredfield2 = models.FloatField()
>> """ % {'prefix':prefix}
>> class A(basemodel):
>>   exec red_port("Port1_")
>>   exec red_port("Port2_")
>>   ...
>>
>> ...which yields sql something like...
>> CREATE TABLE `A` (
>>     `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
>>     ...
>>     `Port1_redfield1` double precision,
>>     `Port1_redfield2` double precision,
>>     `Port2_redfield1` double precision,
>>     `Port2_redfield2` double precision,
>> );
>>
>>
>> I feel DRY again, and only a little bit dirty. :)
>> Dan.
>>
>> On Mon, Dec 7, 2009 at 9:12 AM, Dan <daniel.goert...@gmail.com> wrote:
>>>
>>> I am relatively new to django and relational databases, and need some
>>> Model advice.
>>>
>>> I have a family of network products each with a different combination
>>> of ports.. I will call them red ports and green ports.  For example,
>>> product A will have its own Model and could have 2 red ports and 1
>>> green port.  Product B is similar, but has only 3 green ports.
>>> My current approach is to use an abstract base Model, and then create
>>> Models for products A and B that contain all needed fields, for
>>> example:
>>>
>>> class A(basemodel):
>>>   Port1_redfield1 = ...
>>>   Port1_redfield2 = ...
>>>   ...
>>>   Port2_redfield1 = ...
>>>   Port2_redfield2 = ...
>>>   ...
>>>
>>>
>>> Yuck, not very DRY at all.  I also tried to create a red port Model
>>> and green port Model and use one to one fields to connect them to
>>> products.  The problem with this is that I could not figure out how to
>>> encapsulate the ports; I always had to worry about creating, linking
>>> and deleting port objects when dealing with products.  Not acceptable.
>>>
>>> I also thought about other tricks like generating my models.py file
>>> from a generator program, and dynamic insertion of attributes into
>>> existing classes.  I really would rather not go there.
>>>
>>> So, my question:  Is there a nice DRY way to get the kind of
>>> structured composition that I want?
>>>
>>> Side question: Is there another python ORM that could address my need
>>> better?
>>>
>>> Thanks,
>>> Dan.
>>
>>
>> --
>> Daniel Goertzen
>> -----------------
>> d...@networkintegritysystems.com (work)
>> daniel.goert...@gmail.com (home)
>> -----------------
>> 1 204 272 6149 (home/office)
>> 1 204 470 8360 (mobile)
>> -----------------
>>
>>
>>
>> --
>>
>> You received this message because you are subscribed to the Google Groups
>> "Django users" group.
>> To post to this group, send email to django-us...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> django-users+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/django-users?hl=en.
>>
>

--

You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.


Reply via email to