首页 > 解决方案 > django 管理员在字段中有选择选项取决于其他字段中的值

问题描述

我刚开始使用 Django,在管理端设置模型时遇到了麻烦。

这是情况。我有 12 个中心,每个中心有 20 多个实验室。我有一个出版物模型班。在管理方面,我希望能够为每个出版物分配中心和实验室。每个出版物可以分配多个中心,并且在每个中心内可以分配多个实验室。

但是,我不希望实验室领域列出所有可能的实验室,因为太多了。我希望在实验室字段中看到的列表仅显示在中心字段中选择的中心中的实验室(理想情况下,如果选择了多个中心,则每个中心都有单独的列表可供选择)

以下是我拥有的模型:

class Publications(models.Model):
    center = models.ManyToManyField('Center')
    laboratory = models.ManyToManyField('Laboratory')

class Center(models.Model):
    name = models.CharField(max_length=255)

class Laboratory(models.Model):
    name = models.CharField(max_length=255)

所以,在创建管理类PublicationsAdmin(admin.ModelAdmin), CenterAdmin(admin.ModelAdmin), LaboratoryAdmin(admin.ModelAdmin)( )。但是列表中的实验室太多,易于使用。我只想查看属于所选中心的实验室(理想情况下,如果选择了多个中心,则需要单独的实验室列表或输入框或窗口等)。

有没有办法通过不同的设置将它们联系在一起?或者有没有办法修改逻辑PublicationsAdmin(admin.ModelAdmin)

标签: djangodjango-adminmanytomanyfielddjango-modeladmin

解决方案


为此目的的最佳选择是使用django-autocomplete-light。您将对转发功能特别感兴趣,该功能正是您想要的。

另请注意,为了过滤属于实验室的中心,您需要一个外键 from Centerto Laboratory

class Center(models.Model):
    name = models.CharField(max_length=255)
    laboratory = models.ForeignKey(Laboratory, models.PROTECT)

推荐阅读