Saturday, November 28, 2009

Re: Many-to-many through multiple tables

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