L.h*_*wes 2 python django list
我正在尝试生成一个列表来填充表单的选项。此列表将是动态的,并取决于其他用户创建的选项。以下是列表应源自的模型示例:
#models.py
class User(models.Model):
brewery_you_work_for = models.CharField(choises=ALL_THE_BREWERIES_IN_THE_WORLD)
username = models.CharField()
Run Code Online (Sandbox Code Playgroud)
我希望表格是这样的:
#forms.py
class BestBrewery(forms.Form):
vote = forms.ChoiceField(choices=BREWERIES_A_USER_WORKS_FOR)
Run Code Online (Sandbox Code Playgroud)
我想要做的是列出世界上所有啤酒厂的列表,供某些用户选择作为他们工作的啤酒厂。然后我想生成一个列表供其他用户投票为最佳啤酒厂。
假设我有 3 个用户声称他们在内华达山脉工作,2 个用户声称他们为百威啤酒工作,5 个用户声称他们为 Coors 工作。
我想生成一个如下所示的啤酒厂列表:
(
'Budweiser',
'Coors,
'Sierra Nevada',
)
Run Code Online (Sandbox Code Playgroud)
请注意按字母顺序排列,并且没有重复的啤酒厂列表。
user初始化表单时,您需要传递一个额外的参数。如果您使用视图函数,通常是这样的:
form = BestBrewery(request.user)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是基于类的视图,您应该覆盖get_form_kwargs视图中的方法:
def get_form_kwargs(self):
kwargs = super(MyView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
Run Code Online (Sandbox Code Playgroud)
您的表单应如下所示:
class BestBrewery(forms.Form):
def __init__(self, user, *args, **kwargs):
super(BestBrewery, self).__init__(*args, **kwargs)
self.fields['vote'].choices = (
user.brewery_you_work_for,
user.get_brewery_you_work_for_display()
)
Run Code Online (Sandbox Code Playgroud)
请注意,要覆盖该choices字段,您需要提供包含表单值和要在下拉列表中显示的文本的元组。
| 归档时间: |
|
| 查看次数: |
4193 次 |
| 最近记录: |