gpt4 book ai didi

python - 在 __init__ of forms.Form 中更改 ModelChoiceField 的查询集

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:01 26 4
gpt4 key购买 nike

我目前在为 forms.Form 覆盖 __init__() 时遇到问题。

基本形式

class ReportsMainForm(forms.Form):
---- #Some fields
def __init__(self, *args, **kwargs):
super(ReportsMainForm, self).__init__(*args, **kwargs)

子窗体

class Child(ReportsMainForm):
customer = forms.ModelChoiceField(
queryset=Customer.objects.none(), label="Customer", empty_label=None, required=False)

def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(Child, self).__init__(*args, **kwargs)
self.fields['customer'].queryset = Customer.objects.filter(user=self.request.user)

问题

这里的问题是,我的queryset 还没有更新。我错过了什么?

最佳答案

尝试更改小部件的查询集(嗯...选择):

self.fields['customer'].queryset = ...
self.fields['customer'].widget.choices = self.fields['customer'].choices

为什么?

检查代码(参见 django.forms.model.ModelChoiceField),当在字段上设置查询集时,小部件的选择也会更新(这很好):

但是选择缓存在字段中,所以它们总是相同的...

我认为这是一个错误,因为字段 init 上有显式选项“cache_choices”,默认为 False。

关于python - 在 __init__ of forms.Form 中更改 ModelChoiceField 的查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27480885/

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