首先,我对Django很陌生... 我正在尝试以表格形式添加一个可用的不同用户的下拉菜单(按名称并“动态地”来自我的数据库)。
我正在使用Django 2.2.6。
# MyCustomForm
class DetailedReportForm(forms.Form):
AVAILABLE_USERS = MyUserModel.objects.order_by().values_list('name').distinct()
selected_date = forms.DateTimeField(input_formats=['%d/%m/%Y'], required=True, widget=DateInput())
selected_user = forms.CharField(label="Select a user", widget=forms.Select(choices=AVAILABLE_USERS))
# MyModel
class MyUserModel(models.Model):
id = models.AutoField(db_column='Id', primary_key=True)
name = models.CharField(db_column='Name', unique=True, max_length=90)
...
def __str__(self):
return str(self.name)
我面临的问题是我的查询集不起作用(不确定原因),因为它给了我以下内容:not enough values to unpack (expected 2, got 1)
我尝试用Google搜索它,但我仍然不太清楚此错误消息的含义。
有人可以解释一下这个django错误的含义是什么,以便我可以修复它并将下拉列表包括在我的表单中吗?
答案 0 :(得分:3)
问题是choices
个参数期望像这样的元组列表:[(1, "one"), (2, "two")]
。元组实际值中的第一个元素要存储在DB中,第二个是人类可读的表示形式。
但是实际上您可以使用ModelChoiceField
代替:
class DetailedReportForm(forms.Form):
AVAILABLE_USERS = MyUserModel.objects.order_by().values_list('name').distinct()
selected_date = forms.DateTimeField(input_formats=['%d/%m/%Y'], required=True, widget=DateInput())
selected_user = forms.ModelChoiceField(label="Select a user", queryset=MyUserModel.objects.order_by().distinct("name"))
否则,可用选项列表将不会动态更新,因为表单类中的代码在Django启动时仅运行一次。