Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django自动完成滤光器queryset_Django_Django Queryset_Django Autocomplete Light - Fatal编程技术网

django自动完成滤光器queryset

django自动完成滤光器queryset,django,django-queryset,django-autocomplete-light,Django,Django Queryset,Django Autocomplete Light,我正在尝试使用django自动完成灯光,但我有一些问题。 我想在modelcooicefield中过滤查询集。 若我并没有使用“自动完成”,我的结果选择是正确的,但若我使用的小部件工作不正常,它会显示所有记录 这是我的密码: class MyModelAdminForm(forms.ModelForm): def __init__(self, *args, **kw): super(MyModelAdminForm, self).__init__(*args, **kw)

我正在尝试使用django自动完成灯光,但我有一些问题。 我想在
modelcooicefield
中过滤查询集。 若我并没有使用“自动完成”,我的结果选择是正确的,但若我使用的小部件工作不正常,它会显示所有记录

这是我的密码:

class MyModelAdminForm(forms.ModelForm):
    def __init__(self, *args, **kw):
        super(MyModelAdminForm, self).__init__(*args, **kw)
        self.fields['my_field'] = forms.ModelChoiceField(
            MyModel.objects.filter(status=1),
            widget=autocomplete_light.ChoiceWidget('MyModelAutocomplete')
    )

class MyModelAdmin(ModelAdmin):
    form = MyModelAdminForm

您应该通过
register()
设置
mymodelsautocomplete.choices

或在班级内:

class MyModelAutocomplete(autocomplete_light.AutocompleteModelBase):
    choices = MyModel.objects.filter(status=1)
有关更多信息,请参阅文档:

  • :“此外,关键字参数将设置为类属性。”
  • 如果需要根据用户筛选选项,则可能会很有用

我想自动执行此操作,但不幸的是,小部件不知道表单字段实例。

通过定义方法在
mymodelsautocomplete
中应用过滤器

class MyModelAutocomplete(autocomplete_light.AutocompleteModelBase):
     choices=MyModel.objects.all()
     def choices_for_request(self):
        choices = choices.filter(status=1)
        return self.order_choices(choices)[0:self.limit_choices]  

choices\u for\u request
主要用于动态筛选

我试图在autocomplete light文档中找出如何执行此操作。我找到了方法,但不是没有一点挖掘,所以希望这是有帮助的

在autocomplete_light_registry.py文件中,填写“name”和“choices”参数:

#myapp/autocomplete_light_registry.py
autocomplete_light.register(MyModel,
    #... Other Parameters ...
    name = 'SpecialMyModelAutocomplete',
    choices = YourQuerySetHere, #e.g. MyModel.objects.filter(...)
)
默认名称为“MyModelAutocomplete”,因此,如果一个模型包含多个已注册的自动完成,则需要指定要使用的自动完成(否则它将使用注册表中的第一个,而不是默认值)

要指定,请使用“autocomplete\u names”(来自文档)“字段名的dict:AutocompleteName覆盖将用于字段的默认autocomplete”。在我的例子中,我在django管理员中使用它

#myapp/admin.py
class MyModelAdminForm(autocompletelight.ModelForm):
    class Meta:
        model = MyModel
        autocomplete_names = {'field_name':'SpecialMyModelAutocomplete'}
请注意,您不需要在Autocomplete_名称中包含任何要使用默认Autocomplete的字段。顺便说一句,“自动完成\排除”和“自动完成\字段”在这里可能也很有趣,它们类似于ModelAdmin中的“字段”和“排除”,以指定使用自动完成时包括/排除哪些字段

补充: 您还可以在modelform_工厂中使用“自动完成_名称”:

form = autocomplete_light.modelform_factory(MyOtherModel,autocomplete_names={MyFieldName:'MyModelAutocomplete'}) #where MyFieldName is a ForeignKey to MyModel
从文档中:

autocomplete_light.forms.modelform_factory(model,autocomplete_fields=None,autocomplete_exclude=None,autocomplete_names=None,registry=None,**kwargs)

谢谢你的贡献,它真的把我推向了正确的方向。我使用了文档的以下部分:,和
autocomplete_light.forms.modelform_factory(model,autocomplete_fields=None,autocomplete_exclude=None,autocomplete_names=None,registry=None,**kwargs)