I have some foos which are organized into categories. For each category, I want to be able to select a winner foo.
Hence I have models which look like this:
class Category(models.Model):
name = models.CharField(max_length=30)
# More fields...
winner = models.ManyToManyField(
'Foo',
related_name='winner'
)
class Foo(models.Model):
name = models.CharField(max_length=30)
# More fields...
category = models.ForeignKey(
Category,
related_name='category'
)
(The reason why winner
is a ManyToManyField
is that a single foo may belong to several categories, while in a single category there may be more than one winner due to ex-aequo.)
I want to impose the natural constraint that a foo can win in a category only if it belongs to that category. The most reasonable way to do so seems to use the limit_choices_to
parameter, but it seems to me that it is not possible to limit the choices based on the current instance of the model.
I may be able to impose this constraint in a given form, but I would like to avoid this for two reasons:
- the constraint naturally lives at the model level. It is a particular relation that should always hold between two related models
- the choice of the winner will be made in the admin, and I would like to avoid having to customize the admin forms
Is there any way to impose this constraint in Django?