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.