Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #16397
| Path | csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!news.stack.nl!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail |
|---|---|
| Return-Path | <ian.g.kelly@gmail.com> |
| X-Original-To | python-list@python.org |
| Delivered-To | python-list@mail.python.org |
| X-Spam-Status | OK 0.031 |
| X-Spam-Evidence | '*H*': 0.94; '*S*': 0.00; '(using': 0.05; 'python': 0.08; 'am,': 0.12; 'stored': 0.13; '(django': 0.16; 'hierarchy': 0.16; 'instances.': 0.16; 'workflow': 0.16; 'workflows': 0.16; 'workflows,': 0.16; 'cc:addr:python-list': 0.16; 'this:': 0.16; 'subject:question': 0.17; 'subject:skip:d 10': 0.17; 'wrote:': 0.18; 'marc': 0.18; 'this?': 0.19; 'cc:no real name:2**0': 0.20; 'cheers,': 0.20; 'input': 0.22; 'assume': 0.22; 'header:In-Reply- To:1': 0.22; 'appear': 0.23; 'unsure': 0.23; 'skip:m 30': 0.24; 'cc:2**0': 0.24; 'correctly.': 0.24; 'code': 0.25; 'classes': 0.26; 'django': 0.26; 'message-id:@mail.gmail.com': 0.28; 'pass': 0.29; 'cc:addr:python.org': 0.29; 'nov': 0.29; 'class': 0.29; 'received:mail-bw0-f46.google.com': 0.30; '\xa0\xa0\xa0': 0.31; 'list': 0.32; 'received:209.85.214': 0.32; 'tue,': 0.32; 'implement': 0.32; 'this.': 0.33; 'ordered': 0.34; 'something': 0.35; '...': 0.36; 'instead.': 0.37; 'skip:" 10': 0.37; 'but': 0.37; 'received:google.com': 0.37; 'somewhat': 0.38; 'some': 0.38; 'received:209.85': 0.38; 'e.g.': 0.39; 'i.e.': 0.39; 'should': 0.39; 'received:209': 0.40; 'more': 0.61; '2011': 0.61; 'expert': 0.62; 'order': 0.62; 'here': 0.65; 'collection': 0.69; 'become': 0.69; '1st': 0.70; 'tracking': 0.70; '29,': 0.73; 'database.': 0.74; 'pro': 0.81; 'composite': 0.84; 'comprised': 0.91; 'constitute': 0.91; 'edwards': 0.91 |
| DKIM-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type:content-transfer-encoding; bh=siU0Y0h7QtAfaDfIBdVQvdx8uEyE+jZAQUVcHTiNTqA=; b=LEcT2dt6q7o38llW6pWX8tpl7aQW7Rggh+H0VGjczMcFBuOu9W4FF5k0i6rZxLMiBb KpedYFNhmms3ox84uRmJ2UoHspXBdMNj9LjHrBvEAiwmV4+oQ4zSzL41MXhvTp1FNKx1 jd3SgOL71mftfPhaRNTN6PIp1GzeNlHUssvyA= |
| MIME-Version | 1.0 |
| In-Reply-To | <4ED4F890.70201@gmail.com> |
| References | <4ED4F890.70201@gmail.com> |
| From | Ian Kelly <ian.g.kelly@gmail.com> |
| Date | Tue, 29 Nov 2011 09:38:19 -0700 |
| Subject | Re: Amateur question on class definitions... |
| To | jmarcedwards@gmail.com |
| Content-Type | text/plain; charset=ISO-8859-1 |
| Content-Transfer-Encoding | quoted-printable |
| Cc | python-list@python.org |
| X-BeenThere | python-list@python.org |
| X-Mailman-Version | 2.1.12 |
| Precedence | list |
| List-Id | General discussion list for the Python programming language <python-list.python.org> |
| List-Unsubscribe | <http://mail.python.org/mailman/options/python-list>, <mailto:python-list-request@python.org?subject=unsubscribe> |
| List-Archive | <http://mail.python.org/pipermail/python-list> |
| List-Post | <mailto:python-list@python.org> |
| List-Help | <mailto:python-list-request@python.org?subject=help> |
| List-Subscribe | <http://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.3130.1322584732.27778.python-list@python.org> (permalink) |
| Lines | 64 |
| NNTP-Posting-Host | 2001:888:2000:d::a6 |
| X-Trace | 1322584732 news.xs4all.nl 6850 [2001:888:2000:d::a6]:33208 |
| X-Complaints-To | abuse@xs4all.nl |
| Xref | x330-a1.tempe.blueboxinc.net comp.lang.python:16397 |
Show key headers only | View raw
On Tue, Nov 29, 2011 at 8:21 AM, J. Marc Edwards <jmarcedwards@gmail.com> wrote:
> So I am defining my Python classes for a Django data model. I have a the
> following class hierarchy and would value some expert input on how to best
> implement this.
>
> I have many instances of a particular class which I call a "workflow", e.g.
> wf_1, wf_2, wf_3, etc.
> These class instances of workflows can be combined into "composite
> workflows", e.g. {cwf_1 is comprised of wf1 & wf_3}, {cwf_2 is wf_2 and
> wf_3}, or {cwf_3 is just wf_2}, etc.
> The workflows that constitute the composite workflow is positionally
> dependent, i.e. if cwf_1 is comprised of wf_1 and wf_3, then wf_1 comes 1st
> AND wf_3 is 2nd.
> As I have many workflow instances that accumulate in my persistent database
> (Django data model), then the composite workflows become an ordered
> collection of workflow instances.
>
> My first thought here is that the composite workflow class should have a
> field that is a simple list of workflows, i.e. list(workflows), but I am
> somewhat unsure of how to code this correctly.
>
> Here is a sample pseudo-code...
>
> class a_workflow(models.Model):
> ...
>
> class composite_workflow(models.Model):
> ...a list of "a_workflows", i.e. a composite workflow, should I use this
> syntax?
> set_of_workflows = list(a_workflow)
>
> Is this how a pro would do this?
That would work in general, but since these are Django models I assume
that this relationship will need to be stored in the database. You'll
need to use a ManyToManyField instead. I would do something like
this:
class Workflow(models.Model):
pass
class CompositeWorkflow(models.Model):
workflow_set = models.ManyToManyField('Workflow',
through='CompositeWorkflowOrder')
class CompositeWorkflowOrder(models.Model):
workflow = models.ForeignKey('Workflow')
composite_workflow = models.ForeignKey('CompositeWorkflow')
sequence_num = models.IntegerField()
The CompositeWorkflowOrder model is then responsible for tracking
which workflows are contained by which composite workflows, and in
what order they appear (using sequence_num). See the Django docs on
ManyToManyFields for more info.
Cheers,
Ian
Back to comp.lang.python | Previous | Next | Find similar | Unroll thread
Re: Amateur question on class definitions... Ian Kelly <ian.g.kelly@gmail.com> - 2011-11-29 09:38 -0700
csiph-web