gpt4 book ai didi

python - 如何创建动态 Django 选择字段

转载 作者:行者123 更新时间:2023-12-05 08:27:09 30 4
gpt4 key购买 nike

我正在尝试生成一个列表来填充表单的选项。该列表将是动态的,并且取决于其他用户创建的选择。以下是列表应从中派生的模型示例:

#models.py
class User(models.Model):
brewery_you_work_for = models.CharField(choises=ALL_THE_BREWERIES_IN_THE_WORLD)
username = models.CharField()

我希望表单是这样的:

#forms.py
class BestBrewery(forms.Form):
vote = forms.ChoiceField(choices=BREWERIES_A_USER_WORKS_FOR)

我想做的是列出世界上所有啤酒厂,供某些用户选择作为他们工作的啤酒厂。然后我想生成一个列表供其他用户投票选出最佳啤酒厂。

假设我有 3 个用户声称他们在 Sierra Nevada 工作,2 个用户声称他们在 Budweiser 工作,还有 5 个用户声称他们在 Coors 工作。

我想生成一个如下所示的啤酒厂列表:

(
'Budweiser',
'Coors,
'Sierra Nevada',
)

请注意按字母顺序排列且没有重复的啤酒厂列表。

最佳答案

您需要在初始化表单时传递一个额外的user 参数。如果您使用 View 函数,通常是这样的:

form = BestBrewery(request.user)

如果您正在使用基于类的 View ,您应该覆盖 View 中的 get_form_kwargs 方法:

def get_form_kwargs(self):
kwargs = super(MyView, self).get_form_kwargs()
kwargs['user'] = self.request.user

return kwargs

您的表单应如下所示:

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()
)

请注意,要覆盖 choices 字段,您需要提供包含表单值和要在下拉列表中显示的文本的元组。

关于python - 如何创建动态 Django 选择字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46020023/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com