Saturday, November 28, 2009

Re: Many-to-many through multiple tables

May be Group should include packages of specific versions:

class Group(models.Model):
name = models.CharField(max_length=100)
product = models.ForeignKey(Product)
-packages = models.ManyToManyField(Package)
+packages = models.ManyToManyField(PackageVersion)


class Profile(models.Model):
name = models.CharField(max_length=100)
businessversion = models.ForeignKey(BusinessVersion)
lifecyclestage = models.ForeignKey(LifecycleStage)
group = models.ForeignKey(Group)
-packageversions = models.ManyToManyField(PackageVersion)

So:

for package in profile.profile.group.packages.all():
print package.package.name
print package.version


And what is BusinessVersion I didn't understand.


On Nov 28, 4:59 pm, Jonathan <jonathan.kin...@gmail.com> wrote:
> Hi,
>
> I've slimmed it down to the relevant fields. I'm a bit of a noob, but
> I think I'm basically trying to build a generic framework that can be
> made specific in a profile.
>
> Profile = BusinessVersion + Group + LifecycleStage + Package.Versions
>
> Jonathan
>
> class Product(models.Model):
>     name = models.CharField(max_length=20)
>
> class BusinessVersion(models.Model):
>     version = models.CharField(max_length=10)
>     description = models.CharField(max_length=100)
>     product = models.ForeignKey(Product)
>
> class LifecycleStage(models.Model):
>     name = models.CharField(max_length=40)
>     sequence = models.DecimalField(max_digits=2, decimal_places=0)
>
> class Package(models.Model):
>     name = models.CharField(max_length=100)
>
> class PackageVersion(models.Model):
>     version = models.CharField(max_length=10)
>     package = models.ForeignKey(Package)
>     lifecyclestage = models.ForeignKey(LifecycleStage)
>
> class Group(models.Model):
>     name = models.CharField(max_length=100)
>     product = models.ForeignKey(Product)
>     packages = models.ManyToManyField(Package)
>
> class Profile(models.Model):
>     name = models.CharField(max_length=100)
>     businessversion = models.ForeignKey(BusinessVersion)
>     lifecyclestage = models.ForeignKey(LifecycleStage)
>     group = models.ForeignKey(Group)
>     packageversions = models.ManyToManyField(PackageVersion)
>
> class Stream(models.Model):
>     name = models.CharField(max_length=4)
>     businessversion = models.ForeignKey(BusinessVersion)
>
> On Nov 29, 1:19 am, t0ster <tost...@gmail.com> wrote:
>
>
>
> > Could you post your models.py code here?
>
> > On Nov 28, 1:10 pm, Jonathan <jonathan.kin...@gmail.com> wrote:
>
> > > This may be more of a general database design question, but I want to
> > > come up with something that works with Django's ORM.
>
> > > I have four bits of information that I want to link together. Generic
> > > packages, package versions, groups of packages and a profile that
> > > brings them together.
>
> > > The final goal is a Profile that binds the Packages from a Group to
> > > specific Versions.
>
> > > I have a solution at the moment but it seems a bit clumsy for what
> > > seems like something that would be commonly encountered.
>
> > > 4 models: Package, Version, Group and Profile. I've omitted the id
> > > primary key column on the examples.
>
> > > Package:
> > > | name   |
> > > --
> > > | django |
> > > | python |
>
> > > Version:
> > > | package_id | version |
> > > --
> > > |          1 |     1.0 |
> > > |          1 |     1.1 |
> > > |          2 |     2.4 |
> > > |          2 |     2.6 |
>
> > > Group:
> > > | name |
> > > --
> > > | django_stack |
>
> > > group_packages:
> > > | group_id | package_id |
> > > --
> > > |        1 |          1 |
> > > |        1 |          2 |
>
> > > Profile:
> > > |        name | group_id |
> > > --
> > > | django_prod |        1 |
> > > |  django_dev |        1 |
>
> > > profile_packageversion:
> > > | profile_id | version_id |
> > > --
> > > |          1 |          1 |
> > > |          1 |          2 |
> > > |          2 |          3 |
> > > |          2 |          4 |
>
> > > I can get what I need from a two step process, but is this the best or
> > > most direct way to achieve this?
>
> > > for package in profile.group.packages.all():
> > >     print package.name
> > >     for version in package.versions.all():
> > >         print version
>
> > > Is there a nicer way to do this? Is there a different model structure
> > > that I could use?
>
> > > Jonathan

--

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

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate