如何使用filter_horizo​​ntal显示django admin中manytomany字段的所有可用选项

时间:2017-07-21 07:11:00

标签: python django django-models django-admin

我有两个有多对多关系的模型。一个模型包含所有可能的选择,另一个模型可以包含部分或全部选择。

以下是两种模式:

class LanguageDomains(models.Model):
    DOMAIN_CHOICES=(
    ('Choice1', _(u'Choice1')),
    ('Choice2', _(u'Choice2')),
    ('Choice3', _(u'Choice3')),
    ('Choice4', _(u'Choice4')),
    )
    # There is many more choices in the actual code
    domains = models.CharField(max_length=255, choices=DOMAIN_CHOICES, default=None)

    def __unicode__(self):
        return self.domains

class Revitalization(models.Model):
    code = models.ForeignKey(Codes, related_name ='revitalization')
    program_name = models.CharField(max_length=255, null=True, blank=True)
    year_founded = models.CharField(max_length=4, null=True, blank=True)
    some_domains = models.ManyToManyField(LanguageDomains, related_name='revitalization')

    def __unicode__(self):
        return self.code.primary_name

我的 admin.py:

class RevitalizationAdmin(admin.ModelAdmin):
    list_display = ('code','id')
    filter_horizontal = ('language_domains',)

这就是管理控制台的样子: enter image description here

问题是,有没有办法填充"可用语言域"列出了所有来自LanguageDomains模型的DOMAIN_CHOICES?

1 个答案:

答案 0 :(得分:0)

您可以编写一个data migration来填充LanguageDomains模型表,其中包含所有可用选项。

根据您的用例,如果LanguageDomains的唯一目的是提供多个选项并且不会在运行时进行编辑,请使用django-multiselectfield