我试图了解如何使用django-autocomplete-light为现有项目.对于我已经使用普通ModelChoiceFields的django来说,这似乎是一个很好的自动完成解决方案.
所以,假设我有一个名为MyModel的Model,它有一个id和一个名字.我想知道的是创建表单窗口小部件的最简单方法,它可以为我提供相同的功能
mymodel = forms.ModelChoiceField( required=True, queryset=ships.models.Authority.objects.all() , )
所以我可以将该小部件添加到我想要的任何形式,以便在不使用selec.t的情况下选择MyModel的实例
有什么必要的步骤?我已经将'autocomplete_light'添加到了INSTALLED_APPS和
url(r'autocomplete/', include('autocomplete_light.urls')),
Run Code Online (Sandbox Code Playgroud)
到urls.py和
import autocomplete_light
autocomplete_light.autodiscover()
Run Code Online (Sandbox Code Playgroud)
之前
admin.autodiscover()
Run Code Online (Sandbox Code Playgroud)
但是我对下一步做什么感到困惑:(
请不要在我已经完整阅读的文档中指出我.
我对 Django 及其方式很陌生。我正在尝试为表单创建一个自动完成字段。我的代码如下
表格.py
from django import forms
class LeaveForm(forms.Form):
leave_list = (
('Casual Leave', 'Casual Leave'),
('Sick Leave', 'Sick Leave')
)
from_email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'style': 'width: 400px'}))
start_date = end_date = forms.CharField(widget=forms.TextInput(attrs={'type': 'date', 'style': 'width: 175px'}))
leave_type = forms.ChoiceField(choices=leave_list, widget=forms.Select(attrs={'style': 'width: 400px'}))
comments = forms.CharField(required=True, widget=forms.Textarea(attrs={'style': 'width: 400px; height: 247px'}))
def clean_from_email(self):
data = self.cleaned_data['from_email']
if "@testdomain.com" not in data:
raise forms.ValidationError("Must be @testdomain.com")
return data
Run Code Online (Sandbox Code Playgroud)
我想要实现的是,当用户在"From Email"
字段中键入单词时,我存储在外部数据库中的电子邮件列表应该出现在自动完成列表选项中。
模型.py
from django.db import models
class ListOfUsers(models.Model):
emp_number = …
Run Code Online (Sandbox Code Playgroud) 我在使用dal时遇到了麻烦并尝试构建一个简单的例子.
我做的几乎与Django自动完成灯完全相同:字段未填充并且还应用了链接的答案.
以下是我经历的步骤:
步骤1)当我在html的标题上添加这样的内容时(与上面的答案相同):
<link href="http://dal-yourlabs.rhcloud.com/static/collected/autocomplete_light/vendor/select2/dist/css/select2.css" type="text/css" media="all" rel="stylesheet" />
<link href="http://dal-yourlabs.rhcloud.com/static/collected/autocomplete_light/select2.css" type="text/css" media="all" rel="stylesheet" />
<script type="text/javascript" src="http://dal-yourlabs.rhcloud.com/static/collected/autocomplete_light/autocomplete.init.js"></script>
<script type="text/javascript" src="http://dal-yourlabs.rhcloud.com/static/collected/autocomplete_light/select2.js"></script>
Run Code Online (Sandbox Code Playgroud)
浏览器检查器控制台的错误如下:
Uncaught ReferenceError: yl is not defined(anonymous function) @ autocomplete.init.js:75select2.js:117
Uncaught ReferenceError: yl is not defined(anonymous function) @ select2.js:117
Run Code Online (Sandbox Code Playgroud)
步骤2)所以我在dal库上添加了jquery.js和其他js文件:
<link href="http://dal-yourlabs.rhcloud.com/static/collected/autocomplete_light/vendor/select2/dist/css/select2.css" type="text/css" media="all" rel="stylesheet" />
<link href="http://dal-yourlabs.rhcloud.com/static/collected/autocomplete_light/select2.css" type="text/css" media="all" rel="stylesheet" />
<script type="text/javascript" src="http://dal-yourlabs.rhcloud.com/static/collected/admin/js/vendor/jquery/jquery.js"></script>
<script type="text/javascript" src="http://dal-yourlabs.rhcloud.com/static/collected/admin/js/jquery.init.js"></script>
<script type="text/javascript" src="http://dal-yourlabs.rhcloud.com/static/collected/autocomplete_light/jquery.init.js"></script>
<script type="text/javascript" src="http://dal-yourlabs.rhcloud.com/static/collected/autocomplete_light/autocomplete.init.js"></script>
<script type="text/javascript" src="http://dal-yourlabs.rhcloud.com/static/collected/autocomplete_light/select2.js"></script>
Run Code Online (Sandbox Code Playgroud)
错误改变如下:
select2.js:66 Uncaught TypeError: $(...).select2 …
Run Code Online (Sandbox Code Playgroud) 我一直在学习为 Django Autocomplete Light 提供的以下教程:
https://django-autocomplete-light.readthedocs.io/en/master/tutorial.html
我已成功为表单中的一个字段实现了自动完成,但是我无法完成以下部分:
The documentation states that I should be able to add in a feature which allows the user to create a new choice in the form if their required choice is unavailable. However the tutorial is not particularly clear in explaining how to do this.
I am trying to implement a form in which the user can create a new Feedback by:
我在我的django项目中有一个autocomplete_light的工作实现,从一个下拉列表中的cities_light中提取值,这正确地将外键保存到表单提交中的db中的字段.当我重新访问表单时,我希望自动完成文本字段默认为保存的值,理想情况下使用纯文本中的值并使用"X"按钮(就像已经内置的那样).目前,我看到占位符文本和空白文本字段.当我重新访问表单时,表单中的其他已保存值(此处省略)正确默认.我需要在此处添加什么来触发窗口小部件以显示保存的值?这是我的代码:
forms.py
class UserProfileForm(autocomplete_light.GenericModelForm):
location = autocomplete_light.GenericModelChoiceField(
widget=autocomplete_light.ChoiceWidget(
autocomplete='AutocompleteItems',
autocomplete_js_attributes={'placeholder':'City, State, Country',
'minimum_characters': 3})
)
class Meta:
model = UserProfile
fields = ['location']
Run Code Online (Sandbox Code Playgroud)
models.py
class UserProfile(models.Model):
user = models.ForeignKey(
User,
unique=True
)
location = models.ForeignKey(
City,
blank=True,
null=True
)
Run Code Online (Sandbox Code Playgroud)
autocomplete_light_registry.py
class AutocompleteItems(autocomplete_light.AutocompleteGenericBase):
choices = (
City.objects.all(),
)
search_fields = (
('search_names',),
)
autocomplete_light.register(AutocompleteItems)
Run Code Online (Sandbox Code Playgroud) 我正在尝试将一些数据传递给,autocomplete_light.AutocompleteModelBase
以便我可以从搜索中排除一些模型。我正在尝试使用此处文档中的依赖项信息
但我似乎能明白。
输入的 id 是id_alternate_version-autocomplete
,所以我正在尝试:
$("#id_alternate_version-autocomplete").yourlabsWidget().autocomplete.data = {'id': 'foo'};
Run Code Online (Sandbox Code Playgroud)
但调用的网址看起来像http://127.0.0.1:8000/autocomplete/FooAutocomplete/?q=bar
我想:http://127.0.0.1:8000/autocomplete/FooAutocomplete/?q=bar&id=foo
我怎样才能做这样的事情呢?
我有一个带有自动完成功能的表单字段(使用 django-autocomplete-light 应用程序和 Select2 小部件),它用作搜索过滤器并且按预期工作。
当我提交表单并列出搜索结果时,我想将此表单字段的初始值设置为先前提交的值 - 这样用户就可以调整一些搜索参数,而不是从头开始设置所有搜索过滤器。
此表单字段将用于选择 ~10000 个值之一,因此我需要它来按需加载值。由于表单字段没有预先填充任何值,我不知道如何设置初始值。
模型.py
class Location(models.Model):
place = models.CharField(max_length=50)
postal_code = models.CharField(max_length=5)
Run Code Online (Sandbox Code Playgroud)
视图.py
class LocationAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
qs = Location.objects.all()
if self.q:
qs = qs.filter(place__istartswith=self.q) | qs.filter(postal_code__istartswith=self.q)
return qs
Run Code Online (Sandbox Code Playgroud)
表格.py
class LocationForm(forms.ModelForm):
class Meta:
model = Location
fields = ('place',)
widgets = {
'place': autocomplete.Select2(url='location_autocomplete')
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
谢谢!
对于我尝试在管理中对其进行编码的字段,自动完成灯小部件未完全加载。相反,我得到以下信息
Select2:未找到 jQuery 实例或与 jQuery 兼容的库。确保在网页上的 Select2 之前包含 jQuery。
旁边有一个只有一个选项的选择框。
这类似于之前关于 select2 库的几个问题,大多数解决方案都涉及重新排序 settings.py 中的文件或运行 python manage.py collectstatic。但到目前为止,这些都没有对我有用。
任务是在我的网页上的 Select2 之前包含 jQuery...怎么做?
我正在使用 DJANGO REST FRAMEWORK 来保护我的 API。Django 限制,限制匿名 API 上的请求数量并对用户进行身份验证。
限制在生产模式下不起作用。顺便说一下,我使用 Ubuntu 和 Nginx 服务器来部署我的网站。
我使用了两种方法,但两种方法都不适合我。这是代码。请帮我。我是 django 菜鸟。
我使用的第一种方法如下所述。视图.py
class SustainedAnon(AnonRateThrottle):
rate = '100/day'
class BurstAnon(AnonRateThrottle):
rate = '10/minute'
class SustainedUser(UserRateThrottle):
rate = '100/day'
class BurstUser(UserRateThrottle):
rate = '10/min'
class ProductApi(generics.RetrieveAPIView, mixins.CreateModelMixin):
lookup_field= 'puid'
serializer_class = ProductApisSerializers
"""
Provides a get method handler.
"""
# permission_classes = (IsAuthenticated,)
throttle_classes = (SustainedAnon,SustainedUser,BurstAnon,BurstUser)
def get_queryset(self):
return ProductApis.objects.all()
def post(self, request,*args,**kwargs):
return self.create(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
网址.PY
from django.contrib import admin
from django.urls import path, …
Run Code Online (Sandbox Code Playgroud) django django-models django-serializer django-rest-framework django-autocomplete-light
我在我的应用程序中使用Django Autocomplete Light (DAL)。
为了在用户选择的后台进行一些后处理,我尝试.on('change')
使用 jQuery捕获事件(当 DAL 选择字段选择更改时)(就像我们在输入字段或 Django 选择字段等对象上所做的那样)。 )。但是,我无法捕获该事件。
例如以下代码(已编辑):
$(document).on('change', '#x_select_item', function() {
console.log('Selection on x_select_item changed');
});
Run Code Online (Sandbox Code Playgroud)
是不产生的任何消息。
编辑
以下用于捕获的代码.on('focus)
正在运行:
$(document).on("focus", '#x_select_item', function() {
console.log('THIS IS FIELD x_select_item for on Focus Event');
});
Run Code Online (Sandbox Code Playgroud)
寻找 DAL 事件也没有多大帮助,只是它需要一个到“select2”事件页面。列出的事件包括“change”和“change.select2”,但使用这两个(如上例所示)不会在控制台中产生任何反应。
是否可以通过某种方式在DAL上捕获选择更改事件?
javascript django jquery django-autocomplete-light jquery-events
django ×10
python ×5
jquery ×3
autocomplete ×2
django-admin ×1
django-forms ×1
forms ×1
javascript ×1