不同的用户获得相同的搜索结果

时间:2014-10-03 11:36:11

标签: python django jquery-select2

我的问题如下。我有一个带有字段的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))

问题在于,当两个不同的用户同时进入此页面时,它们都具有相同的选项列表,完全是首先加载页面的用户所具有的选项列表。这种行为是不正确的,他们应该有不同的选项列表。

拜托,有谁能告诉我如何解决这个问题?

1 个答案:

答案 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)