В Django, как я могу иметь форму, где я могу указать любую из двух сторон отношения m2m? - PullRequest
0 голосов
/ 26 ноября 2011

У меня есть модель, похожая на:

class Node(models.Model):
    output_edges = models.ManyToManyField('self', related_name='input_edges', symmetrical=False, blank=True)

Я хотел бы создать / иметь форму (ModelForm?), Где я мог бы указать output_edges, input_edges (или даже оба) и они будут правильно храниться.По умолчанию форма для вышеуказанной модели работает только тогда, когда POST содержит output_edges значений.Но не input_edges.

1 Ответ

0 голосов
/ 27 ноября 2011

ОК, думаю, мне удалось:

class NodeModelForm(forms.ModelForm):
    input_edges = forms.ModelMultipleChoiceField(queryset=models.Node._default_manager.all(), required=False)

    def save(self, commit=True):
        instance = super(NodeModelForm, self).save(commit=False)

        super_save_m2m = self.save_m2m
        delattr(self, 'save_m2m')

        def save_m2m():
            super_save_m2m()

            if self._meta.fields and 'input_edges' not in self._meta.fields:
                return
            if 'input_edges' in self.cleaned_data:
                setattr(instance, 'input_edges', self.cleaned_data['input_edges'])

        if commit:
            instance.save()
            save_m2m()
        else:
            self.save_m2m = save_m2m

        return instance
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...