chefsmart wrote:
> Yes, I overlooked the M2M relation in my rush. Thanks for pointing
> that out.
>
> I would use your model representations as is, except that the order
> field in the intermediary model ProcessPhase would be
>
> order = models.PositiveIntegerField(unique=True)
>
> instead of
>
> order = models.PositiveIntegerField()
>
> So let me rephrase my original question with the new model
> definitions: -
>
> How do I go about allowing the user to (a) select all the Phases that
> need to be included in a given Process and (b) specify their
> respective orders in a single "screen/page"? The way I see it, I would
> use a ModelMultipleChoiceField to allow the user to select all the
> phases that they want. But how do I allow the user to specify the
> order of each selected phase in the same "screen/page"?
>
> Regards,
> CM.
>
> On Oct 20, 12:29 pm, "Bogdan I. Bursuc" <bogdanbursu...@gmail.com>
> wrote:
>   
>> chefsmart wrote:
>>     
>>> I have a particular scenario that I can't seem to figure out how to
>>> accomplish in Django.
>>>       
>>> I have the following models: -
>>>       
>>> class Process(models.Model):
>>>     name = models.CharField(max_length=50)
>>>     is_active = models.BooleanField(db_index=True)
>>>       
>>> class Phase(models.Model):
>>>     name = models.CharField(max_length=50)
>>>     is_active = models.BooleanField(db_index=True)
>>>       
>>> class ProcessPhase(models.Model):
>>>     process = models.ForeignKey(Process)
>>>     phase = models.ForeignKey(Phase)
>>>     order = models.PositiveIntegerField(help_text="At what step of
>>> your process will this phase occur?", unique=True)
>>>     class Meta:
>>>         ordering = ['order']
>>>         unique_together = (("recruitment", "phase"),)
>>>       
>>> Here an instance of Process can have many instances of Phases, and
>>> each Phase in a Process needs to be completed in the order specified.
>>> Different Processes may have their phases in different order, this is
>>> why the order is specified as part of the ProcessPhase model instead
>>> of the Phase model.
>>>       
>>> I am having difficulty in implementing the creation of ProcessPhase in
>>> the UI. Ideally the user would be able to select all the phases that
>>> need to be included in a given Process and specify their respective
>>> orders in a single "screen/page". (This is required also because in
>>> the ProcessPhase model, the order field has unique=True.)
>>>       
>>> Right now I have a ModelMultipleChoiceField for phases so that the
>>> user may choose the phases that need to be included. I then use a
>>> second form (a formset really) to allow the user to specify the
>>> desired order for the selected phases. Then I tried to make it more
>>> intuitive for the user so that they do not have to go through two
>>> different forms to achieve the end result, so I explored the
>>> FormWizard. However, it seems the FormWizard does not support using
>>> formsets in its steps.
>>>       
>>> So how would you implement this in Django?
>>>       
>> Sorry, but this looks pretty wrong to me.
>> Dunno if I get this right but if I do you should do this with M2M
>> relation and additional data to the M2M relation like this:
>>
>> class Phase(models.Model):
>>     name = models.CharField(max_length=50)
>>     is_active = models.BooleanField(db_index=True)
>>
>> class Process(models.Model):
>>     name = models.CharField(max_length=50)
>>     phases = models.ManyToManyField(Phase, through='ProcessPhase')
>>     is_active = models.BooleanField()
>>
>> class ProcessPhase(models.Model):
>>     process = models.ForeignKey(Process)
>>     phase = models.ForeignKey(Phase)
>>     order = models.PositiveIntegerField()
>>
>>     class Meta:
>>        ordering = ['order']
>>        # and i think you can skip the unique together, because
>>        # this already imply because of the M2M relation
>>
>> Dunno if this is right or needs adjusted, you should read more about
>> this here:
>>
>> http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-m...
>>     
> >
>
>   
You create a form to the model ProcessPhase, like this:

class ProcessPhaseForm(forms.ModelForm):
    class Meta:
       model = ProcessPhase
       exclude = ('process',)

and you make a form set from this form, you should read here about this:
    http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#id1

and then you'll have a set of forms that need to have specified Phase 
and order field by the user,
and you can override the save() method on the BaseFormset to set the 
process on each form,
read some on here about formsets and they're overrides:
    
http://docs.djangoproject.com/en/dev/topics/forms/formsets/#topics-forms-formsets

and you don't have to use ModelMultipleChoiceField instead you'll use a 
set of forms,
you can set with the extra parameter how many forms to be displayed.

Hope you understand what i'm trying to say, i'm a bad writer.
I think if you document on the modelformsets you figure it out.
      

--~--~---------~--~----~------------~-------~--~----~
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+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to