首页 > 解决方案 > 如何在 admin django 中设置多选选项

问题描述

我有一个模型

class Event(models.Model):

    event_name = models.CharField(max_length=100, default="")
    event_organizer = models.ForeignKey(Organizer, on_delete=models.CASCADE)
    event_type = models.ForeignKey(Type, on_delete=models.CASCADE)
    event_city = models.ForeignKey(Citie, on_delete=models.CASCADE)
    event_tag = models.ForeignKey(Tag, on_delete=models.CASCADE)

我有一个字段 event_tag。在管理面板中添加事件表单期间,我想选择多个标签。如何做到这一点以及如何保存它们

标签: djangodjango-modelsdjango-formsdjango-viewsdjango-admin

解决方案


由于您定义event_tag为 ForeignKey 进行Tag建模,因此您不能为一个 Event 选择多个标签。

但是,如果你想这样做,你应该Event像这样定义你的模型:

class Event(models.Model):

    event_name = models.CharField(max_length=100, default="")
    event_organizer = models.ForeignKey(Organizer, on_delete=models.CASCADE)
    event_type = models.ForeignKey(Type, on_delete=models.CASCADE)
    event_city = models.ForeignKey(Citie, on_delete=models.CASCADE)
    event_tag = models.ManyToManyField('Tag')

现在,如果您在管理员中同时注册EventTag建模,您应该能够为一个事件选择多个标签。

编辑

正如您在评论中提到的,您的Tag模型有一个is_active字段,您希望将选择限制为那些处于活动状态的选项。

这可以limit_choices_to在 M2M 文件中使用:

class Event(models.Model):
    #...
    event_tag = models.ManyToManyField('Tag', limit_choices_to={'is_active': True})

推荐阅读