用于两个 m2m 字段的 django 一个小部件

django one widget for two m2m fields

我的模型 ModelFrom 有两个 manytomany 字段,它们都指向同一个模型,称之为 ModelTo。

ModelFrom(models.Model):
    field_one = ManyToManyField(ModelTo)
    checked = ManyToManyField(ModelTo)

checked 是字段 1 的子集。我已经在模型 clean() 和 adminform clean() 方法中正确验证了这一点,并更新了 model::save() 以调用 self.full_clean().

理想情况下,我会拥有一个小部件,很像 django.forms.SelectMultiple,但每个 <option> 中都有一个复选框。

它目前的样子,我有每个字段的这些小部件之一: :

我想将它们结合起来并有一个复选框或其他东西,这是我对它的外观的 unicode 表示

{ [ blah: 2 ☐] , [blah: 1 ☑] }

列表中的值 -> 字段一已设置。选中框 -> 已选中,因为它是 field_one.

的子集

我看过 jQuery UI MultiSelect 小部件,但似乎没有办法能够 select 一个选项,但不选中该框。

我无法直接回答我自己的问题,但像大多数问题一样,如果无法回答则可能存在潜在问题。

我不应该有两个 many2many 字段,而应该只有一个,设置通过 属性 作为中间字段。 像这样:

class IntermediateField(models.Model):
     checked = BooleanField()
     from = ForeignKey(ModelFrom)
     to = ForeignKey(ModelTo)  

ModelFrom(models.Model):
    field_one = ManyToManyField(ModelTo, through=IntermediateField)

然后,我们可以在 ModelFrom admin 中为 IntermediateField 使用内联,轻松选中复选框等