Aus*_*tin 13 django django-forms
让我们说例如我有一个名为"Client"的模型和一个名为"PhoneNumbers"的模型
class PhoneNumbers(models.Model):
number = forms.IntegerField()
class Client(models.Model):
number = forms.ManyToManyField(PhoneNumbers)
Run Code Online (Sandbox Code Playgroud)
客户端与PhoneNumbers具有ManyToMany关系.PhoneNumbers中有近500,000条记录,因此在使用带有M2M字段的MultiSelect小部件从模型表单编辑客户端记录时,需要永久加载.事实上,它永远不会.它只是坐在那里试图加载我假设的所有这些手机对象.
我的解决方法是使用ajax和jquery进行一些繁琐的工作来编辑客户端记录中的电话号码.在浪费我所有的时间之前,我想看看是否有某种方式可以解决这个问题,而不会让我的页面挂起.
您需要为此字段创建自定义窗口小部件,以便您自动完成正确的记录.如果您不想自己动手:http://django-autocomplete-light.readthedocs.io/
我已将其用于其通用关系支持,M2M自动完成看起来非常简单直观.在这里查看使用视频:http://www.youtube.com/watch?v = fJIHiqWKUXI&feature = youroutu.be
在阅读了关于在管理员之外需要它的评论后,我又看了一下django-autocomplete-light
图书馆.它提供了您可以在管理员外部使用的小部件.
from dal import autocomplete
from django import forms
class PersonForm(forms.ModelForm):
class Meta:
widgets = {
'myformfield': autocomplete.ModelSelect2(
# ...
),
}
Run Code Online (Sandbox Code Playgroud)
从 Django 2.0 开始,Django Admin 附带了一个autocomplete_fields
属性,可以为外键和多对多字段生成自动完成小部件。
class PhoneNumbersAdmin(admin.ModelAdmin):
search_fields = ['number']
class ClientAdmin(admin.ModelAdmin):
autocomplete_fields = ['number']
Run Code Online (Sandbox Code Playgroud)
请注意,这当然仅适用于 Django 管理员的范围。要在管理员之外获取自动完成字段,您需要一个额外的包,例如django-autocomplete-light
其他答案中已经建议的包。
归档时间: |
|
查看次数: |
2987 次 |
最近记录: |