我的问题如下。我有一个带有字段的Django表单,它继承了Selet2字段:
class Select2ModelField(MyBaseSelect2ModelField, AutoModelSelect2Field):
'''
Select2ModelField, that uses ajax to get autocomplete options.
Should be used by default.
'''
widget = Select2ChoiceWidget
class LimitedDepartmentChoiceField(Select2ModelField):
def __init__(self, *args, **kwargs):
super(LimitedDepartmentChoiceField, self).__init__(*args, **kwargs)
然后我在我的表单中使用它,在views.py中创建此字段,因为此字段的内容取决于请求数据:
form = RepresentativeCreateEditForm(request.POST)
form.fields['department'] = LimitedDepartmentChoiceField(label=u'Department',
queryset=Department.objects.filter(
id__in=all_deps_ids))
问题在于,当两个不同的用户同时进入此页面时,它们都具有相同的选项列表,完全是首先加载页面的用户所具有的选项列表。这种行为是不正确的,他们应该有不同的选项列表。
拜托,有谁能告诉我如何解决这个问题?
答案 0 :(得分:0)
这听起来像一个值被设置为一个类属性(某个地方,在你的一个类上),而不是作为一个特定类的实例的属性。继承了很多继承,因此您可能需要进行一些挖掘以确切了解问题所在。我的猜测是它是Select2ChoiceWidget
类。
在您的代码示例中,它看起来像Select2ModelField
的所有实例,其子类在它们之间共享一个单 Select2ChoiceWidget
类。我认为这将是问题的原因。
我不太了解你正在使用的Django课程,但也许可以尝试这些方法吗?
class Select2ModelField(MyBaseSelect2ModelField, AutoModelSelect2Field):
'''
Select2ModelField, that uses ajax to get autocomplete options.
Should be used by default.
'''
def __init__(self, *args, **kwargs):
# Not sure if this is the proper way to instantiate this class,
# but doing so would help avoid leaking data across the instances
# of Select2ModelField and its subclasses.
self.widget = Select2ChoiceWidget()
# Do the parent class(es) for good measure.
super(Select2ModelField, self).__init__(self, *args, **kwargs)