Django - Ограничьте выбор чем-то, что зависит от экземпляра

У меня есть несколько файлов, которые организованы по категориям. Для каждой категории я хочу иметь возможность выбрать победителя foo.

Следовательно, у меня есть модели, которые выглядят следующим образом:

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

(Причина, по которой победитель является ManyToManyField , заключается в том, что один объект foo может принадлежать нескольким категориям, в то время как один category может быть более одного победителя из-за ex-aequo.)

Я хочу наложить естественное ограничение, согласно которому foo может выиграть в категории, только если он принадлежит к этой категории. Наиболее разумным способом сделать это кажется использование параметра limit_choices_to , но мне кажется, что невозможно ограничить выбор на основе текущего экземпляра модели.

Я могу наложить это ограничение в заданной форме, но я хотел бы избежать этого по двум причинам:

  • ограничение естественным образом существует на уровне модели. Это особое отношение, которое всегда должно поддерживаться между двумя связанными моделями
  • . Выбор победителя будет производиться в админке, и я бы хотел избежать необходимости настраивать административные формы

Есть ли способ наложить это ограничение в Django?

8
задан Andrea 6 October 2011 в 10:06
поделиться