我有一种情况,我希望利用 Django 的自动完成管理小部件,它尊重引用模型字段限制。
例如,我有以下Collection模型,该模型kind具有指定选项的属性。
class Collection(models.Model):
...
COLLECTION_KINDS = (
('personal', 'Personal'),
('collaborative', 'Collaborative'),
)
name = models.CharField()
kind = models.CharField(choices=COLLECTION_KINDS)
...
另一个模型ScheduledCollection引用Collection了一个ForeignKey实现limit_choices_to选项的字段。此模型的目的是将元数据与Collection特定用例的a 相关联。
class ScheduledCollection(models.Model):
...
collection = models.ForeignKey(Collection, limit_choices_to={'kind': 'collaborative'})
start_date = models.DateField()
end_date = models.DateField()
...
两种模型都注册了ModelAdmin. 该Collection模型实现search_fields.
@register(models.Collection)
class CollectionAdmin(ModelAdmin):
...
search_fields = ['name']
...
该ScheduledCollection模型实现autocomplete_fields
@register(models.ScheduledCollection)
class ScheduledCollectionAdmin(ModelAdmin):
...
autocomplete_fields = ['collection']
...
这有效,但并不完全符合预期。自动完成从Collection模型生成的视图中检索结果。在limit_choices_to不过滤的结果,并在保存才会生效。
已建议实施get_search_results或get_queryset在CollectionAdmin模型上。我能够做到这一点并过滤结果。但是,这会全面改变Collection搜索结果。我不知道如何根据关系获得更多上下文get_search_results或get_queryset有条件地过滤结果。
在我的情况下,我希望有多种选择Collection和几种具有不同limit_choices_to选项的元模型,并让自动完成功能尊重这些限制。
我不希望这会自动工作,也许这应该是一个功能请求。在这一点上,我不知道如何根据选择限制(或任何条件)过滤自动完成的结果。
不使用autocomplete_fieldsDjango 管理员的默认<select>小部件过滤结果。
江户川乱折腾
30秒到达战场
森林海
相关分类