3

我有一个名为 picks 的模型,它允许用户选择一个 nfl 团队(从静态列表中)。每当他们选择一个团队时,他们就不能再选择该团队,因此他们选择的任何团队都会减少选择的选择。
在我看来,我有一个函数可以计算出他们尚未选择哪些团队,但我无法弄清楚如何将此信息传递给表单。我在网上查看了许多表单示例,但还没有真正找到一个显示如何完成此操作的示例。从我读过的内容来看,似乎我应该从 forms.py 文件中调用此函数,但该函数需要作为参数传入的用户 ID 和联赛 ID,所以我宁愿只在模型中执行此操作。谁能解释一下,

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

谢谢!

编辑

好的,我想也许我在这里为这个问题提供了太多非关键信息,我将尝试在这里简化问题:

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

我现在没有代码在我面前发布,但我真的认为它与问题无关。我希望我已经让它足够通用了。

4

2 回答 2

0

You can first define your form without the dynamic field. AFTER creating an instance of it in your view, you can add the dynamic select field by typing

form_instance.fields['your_field'] = ChoiceField(choices=list_of_two_tuples)

or make use of the ModelChoiceField and type something like

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

Or you can use the similar, but probably cleaner mechanism described here.

于 2012-12-03T21:03:10.647 回答
0

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

假设您在 and 之间有关系TeamUser请执行以下操作(在您看来)

form.fields['team'].queryset = Teams.objects.exclude(selected_by_user = user.id)

记住一件事:

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 日起未选择的团队。

参考: Django 查询集(排除过滤器)

于 2011-05-25T07:22:03.117 回答