【发布时间】:2021-02-26 06:05:42
【问题描述】:
我有一个如下设置的表格。表单类有单选组:
class BookForm(ModelForm):
class Meta:
widgets = {
'book_type': RadioSelect(attrs={'class': 'horizontal-radiogroup'}),
}
并且在 init 中,选择是动态设置的:
self.fields['book_type'].queryset = available_book_types
其中available_book_types 是根据条件过滤的查询集。
我需要在模板中选中的单选组中动态设置一个值。
我尝试了以下方法:
self.fields['book_type'].initial = available_book_types.filter(category='Fiction').first()
但它没有用。有没有办法实现这一点,还是我需要在前端使用 JavaScript 来处理?
编辑: 我使用的表格如下:
从视图中调用:
def book_get_response(request, book=None)
...
initial_data = request.GET
form = BookForm(instance=book, initial=initial_data)
return {'form': form}
在初始化中我有我最初发布的代码。
如果我在创建表单之前设置它,我实际上已经设法让它工作,在initial_datadict 中。如果我设置这本书,它会起作用:
initial_data['book_type'] = Book.objects.filter(category='Fiction').first()
但是,如果我在 init 中打印该字段的initial,它会显示为“无”,但在模板中已正确选中单选按钮。这是为什么呢?
【问题讨论】:
-
您确定
available_book_types有 项带有category='Fiction'吗?如果没有,.first()将返回None,然后不会选择初始的。 -
您能否进一步分享如何您在视图中使用表单?
-
我确定它退出了。我现在用一些细节更新了原始问题。谢谢。
标签: django forms radio-button