использование initial в django MultipleChoiceField для отношения «многие ко многим»

#python #django

#python #django

Вопрос:

В моей модели у меня есть:

     flowcell = models.ForeignKey("FlowCell", on_delete=models.PROTECT)

    lanes = models.ManyToManyField("main.FlowCellLane", related_name='demuxers', blank=True)
  

в моей форме я хочу, чтобы они могли выбираться на основе доступных FlowCellLanes. Итак, я подключаю ячейку потока к переменной и использую ее, чтобы увидеть, какие «дорожки» есть:

 class DemuxerForm(forms.ModelForm):
    class Meta:
        model = Demuxer
        exclude = ["owner", "pid", "flowcell"]

    lanes = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple)

    def __init__(self, *args, **kwargs):
        self.flowcell = kwargs.pop('flowcell')
        super().__init__(*args, **kwargs)
        self.fields['lanes'].choices = sorted([(lane.pk, str(lane.lane_number))
                                               for lane in self.flowcell.lanes.all()])
  

Теперь я хотел бы установить все доступные флажки. Но я не знаю, как я мог это сделать. В том месте, где может быть initial =, ‘self’, конечно, недоступен… есть идеи?

Ответ №1:

Я понял это:

 choices = self.flowcell.lanes.values_list("pk", lane_number").order_by("lane_number")
self.fields['lanes'].choices = choices
self.fields["lanes"].initial = [pk for pk, _ in choices]