Применение:
Это система предложений семинара для конференции. Пользователь может создавать докладчиков и семинары и связывать их вместе. Каждый пользователь должен иметь доступ только к тем докладчикам и семинарам, которые он / она создал / владеет.
# Models:
class Workshop(models.Model):
name = models.CharField(max_length=140, db_index=True)
presenters = models.ManyToManyField("Presenter", through="WorkshopPresenter")
owner = models.ForeignKey(User)
class Presenter(models.Model):
name = models.CharField(max_length=140, db_index=True)
owner = models.ForeignKey(User)
class WorkshopPresenter(models.Model):
workshop = models.ForeignKey("Workshop")
presenter = models.ForeignKey("Presenter")
cardinality = models.IntegerField()
Чтобы связать докладчиков с семинарами, пользователь направляется на специальную страницу семинара, содержащую набор моделей для WorkshopPresenter
. Семинар и количество элементов задаются представлением после заполнения набора форм, поэтому пользователь видит только список раскрывающихся списков с возможными именами докладчиков.
Изображение страницы ассоциации
Вопрос : Как я могу сделать так, чтобы раскрывающиеся списки докладчиков на этой странице ассоциации содержали только докладчиков, принадлежащих текущему пользователю? Выпадающие списки должны содержать только результаты Presenter.objects.filter(owner__exact=request.user)
. В настоящее время они содержат всех докладчиков.
# View snippet that creates the formset:
workshop = Workshop.objects.filter(owner__exact=request.user).get(id=workshop_id)
MyWorkshopPresenterFormSet = modelformset_factory(WorkshopPresenter,
formset=WorkshopPresenterFormSet,
extra=5,
exclude = ("workshop","cardinality"))
formset = MyWorkshopPresenterFormSet(request.POST or None,
queryset=workshop.workshoppresenter_set.all())
WorkshopPresenterFormSet
просто расширяет BaseModelFormSet
и выполняет некоторую пользовательскую проверку, ничего особенного.
Я видел некоторые решения, которые работают для обычных форм, но ничего не работает с наборами моделей.