On 18/05/2012 12:25pm, oneroler wrote:
Thanks Mike, that is what I was originally planning to do but realized there would be situations where that wouldn't do exactly what I wanted. For example, if there is a business that only has the strategy 'wholesale' assigned, using ForeignKey would still allow me to assign a different strategy to a division. I was hoping to find a solution where the strategy for a division is constrained by the strategies assigned to its respective business.

It is done in the Admin by nesting admin.StackedInline classes. Essentially a queryset provides the choices for selecting a Strategy from those belonging to the Division's parent Business. Perhaps that is the way to do it in your forms.

To prevent incorrect Strategy assignment, I would build a Division.clean() method which tests whether the Division.strategy is valid.

I'm a beginner at this but here is a stab at a Division.clean() and maybe a dguru can contribute ...

Bear in mind that there will be an automatically created business_strategy table to carry all the many-to-many relationships. I would replace it with my own called (say) BusinessStrategy and in the Business model use the 'through' attribute to specify that table.

    class BusinessStrategy(models.Model):
        business = models.ForeignKey(Business)
        strategy = models.ForeignKey(Strategy)

Then I could make a Division.clean() method something like this ...

    def clean(self):
        for item in BusinessStrategy.objects.all(business=self.business):
            if self.strategy == item.strategy:
                return True
        raise ValidationError(u'Invalid strategy)



On Thursday, May 17, 2012 5:55:11 PM UTC-7, Mike Dewhirst wrote:

    On 18/05/2012 7:02am, oneroler wrote:
    > I'm trying to setup my first app and I'm trying to figure out
    the best
    > way to have constraints on a particular field (strategy for class
    > Division noted below).  Below is the basic model structure.  What I
    > would like is for the strategy under a Division to be
    constrained to
    > the strategies selected for the Business.  A business may have many
    > strategies, but a division will only have one (but it should
    only be
    > one selected for the business).  Any help on this would be
    > appreciated.  Thanks, Sam
    >
    > class Strategy(models.Model):
    >     name = models.CharField(max_length=200)
    >
    > #name would be something like retail, wholesale, etc
    >
    > class Business(models.Model):
    >    name = models.CharField()
    >    strategy = models.ManyToManyField(Strategy)
    >
    > class Division(models.Model):
    >     business = models.ForeignKey(Business)
    >     name = models.CharField()
    >     strategy = ???

    Try ...

        strategy = models.ForeignKey(Strategy)


    >
    > --
    > You received this message because you are subscribed to the Google
    > Groups "Django users" group.
    > To view this discussion on the web visit
    > https://groups.google.com/d/msg/django-users/-/sunwQb8Ft0cJ
    <https://groups.google.com/d/msg/django-users/-/sunwQb8Ft0cJ>.
    > To post to this group, send email to
    django-users@googlegroups.com <mailto:django-users@googlegroups.com>.
    > To unsubscribe from this group, send email to
    > django-users+unsubscr...@googlegroups.com
    <mailto:django-users%2bunsubscr...@googlegroups.com>.
    > For more options, visit this group at
    > http://groups.google.com/group/django-users?hl=en
    <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 view this discussion on the web visit https://groups.google.com/d/msg/django-users/-/-hITt8lS1f0J.
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.

--
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