小编Joh*_*ker的帖子

如何使用 limit_choices_to 的上下文过滤 ModelAdmin autocomplete_fields 结果

我有一种情况,我希望利用 Django 的自动完成管理小部件,它尊重引用模型字段限制。

例如,我有以下Collection模型,该模型kind具有指定选项的属性。

class Collection(models.Model):
    ...
    COLLECTION_KINDS = (
        ('personal', 'Personal'),
        ('collaborative', 'Collaborative'),
    )

    name = models.CharField()
    kind = models.CharField(choices=COLLECTION_KINDS)
    ...
Run Code Online (Sandbox Code Playgroud)

另一个模型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()
    ...
Run Code Online (Sandbox Code Playgroud)

两种模型都注册了ModelAdmin. 该Collection模型实现search_fields.

@register(models.Collection)
class CollectionAdmin(ModelAdmin):
    ...
    search_fields = ['name']
    ...
Run Code Online (Sandbox Code Playgroud)

ScheduledCollection模型实现autocomplete_fields

@register(models.ScheduledCollection)
class ScheduledCollectionAdmin(ModelAdmin):
    ...
    autocomplete_fields = ['collection'] …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-admin

3
推荐指数
2
解决办法
3962
查看次数

标签 统计

django ×1

django-admin ×1

django-models ×1

python ×1