如何在admin django中设置多选选项

时间:2019-11-08 13:40:05

标签: django django-models django-forms django-views django-admin

我有一个模特

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字段。在管理面板中添加事件表单期间,我想选择多个标签。该怎么做以及如何保存它们

1 个答案:

答案 0 :(得分:1)

由于您将event_tag定义为Tag模型的ForeignKey,因此无法为一个事件选择多个标签。

但是,如果要这样做,则应像这样定义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字段,并且您希望将选择限制为活动的。

可以在提交的M2M中使用limit_choices_to完成此操作

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