django-表单中的动态选择字段

django-表单中的动态选择字段,django,django-forms,django-select-related,Django,Django Forms,Django Select Related,我有一个名为picks的模型,允许用户(从静态列表中)选择nfl球队。每当他们选择一个团队时,他们不能再选择该团队,因此他们选择的任何团队都会减少选择。 在我的视图中,我调用了一个函数,该函数可以找出他们尚未选择的团队,但我无法找出如何将此信息传递给表单。我在网上看过很多表单示例,但还没有找到一个能够说明如何实现这一点的。从我读到的内容来看,似乎我应该从forms.py文件中调用这个函数,但是这个函数需要作为参数传入的用户id和联盟id,所以我宁愿在模型中这样做。有人能解释一下,或者给我指一个说

我有一个名为picks的模型,允许用户(从静态列表中)选择nfl球队。每当他们选择一个团队时,他们不能再选择该团队,因此他们选择的任何团队都会减少选择。
在我的视图中,我调用了一个函数,该函数可以找出他们尚未选择的团队,但我无法找出如何将此信息传递给表单。我在网上看过很多表单示例,但还没有找到一个能够说明如何实现这一点的。从我读到的内容来看,似乎我应该从forms.py文件中调用这个函数,但是这个函数需要作为参数传入的用户id和联盟id,所以我宁愿在模型中这样做。有人能解释一下,或者给我指一个说明,说明如何将选择字段从模型传递到表单吗

我对Django和Python都比较新,所以请原谅我在这里犯的任何明显的疏忽

谢谢

编辑

好吧,我想也许我在这里为这个问题提供了太多非关键性的信息,我会尽量简化这个问题:

我有一个创建表单的视图。表单中有一个选择框。我根据当前用户和启动视图的URL中的一个变量,计算应该放在视图内部的选择框中的选项。我想知道如何将select选项传递到表单中,或者如果这不是应该如何实现的


我现在还没有可以发布的代码,但我真的认为这与问题无关。我希望我已经使它足够通用。

我认为最简单的方法是修改表单的查询集。 想法是排除您不想要的团队(因为他们已经被选中)

假设您在
团队
用户
之间存在关系,请执行以下操作(在您的视图中)

记住一件事:

Teams.objects.exclude(selected_by_user = user.id, date = datetime(2008, 12, 31))
将匹配由用户选择的团队和非2008年12月31日的
团队,而

Teams.objects.exclude(selected_by_user = user.id,).exclude(date = datetime(2008, 12, 31))
将匹配从2008年12月31日起未被用户选中的球队

参考资料:

您可以先定义表单,而不使用动态字段。在视图中创建其实例后,可以通过键入来添加动态选择字段

form_instance.fields['your_field'] = ChoiceField(choices=list_of_two_tuples)
或者使用ModelChoiceField并键入类似的内容

form_instance.fields['your_field'] = ModelChoiceField(queryset=Teams.filter(...))

或者您可以使用所描述的类似但可能更干净的机制。

您想分享一些代码吗?例如,你的模型,你的表格,以及你观点中的相关信息。请看我的答案。查询集正是您所需要的。
form_instance.fields['your_field'] = ModelChoiceField(queryset=Teams.filter(...))