【发布时间】:2010-12-16 20:57:43
【问题描述】:
应用: 这是一个会议的研讨会提案系统。用户可以创建演示者和研讨会,并将它们链接在一起。每个用户只能访问她/他创建/拥有的演示者和研讨会。
# 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 的模型表单集。工作坊和基数由表单集填写后的视图设置,因此用户只能看到带有可能的演示者姓名的下拉列表。
Image of the association page
问题:如何才能使此关联页面上的演示者下拉列表仅包含当前用户拥有的演示者?下拉列表应该只包含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 并进行一些自定义验证,没什么特别的。
我已经看到了一些适用于常规表单的解决方案,但不适用于模型表单集。
【问题讨论】:
标签: django django-models django-forms