【问题标题】:Set radio button initial value if choices come from queryset如果选择来自查询集,则设置单选按钮初始值
【发布时间】: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


【解决方案1】:

我找到了答案。显然,问题是我在调用super 后尝试设置初始值。在此之前,fields 属性不可访问,因此解决方案是使用

self.initial['book_type'] = Book.objects.filter(category='Fiction').first()

这里也讨论过: Initial value in form's __init__ for the model with generic relation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-04
    • 2017-09-02
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多