From 8db7c39bbf9df6a0230527dc01857f23e5eb766b Mon Sep 17 00:00:00 2001 From: Iwo Herka Date: Fri, 13 Jul 2018 14:06:21 +0000 Subject: [PATCH] Save M2M relations on form save (#13) --- eav/forms.py | 1 + eav/managers.py | 1 - eav/registry.py | 1 - tests/forms.py | 18 ++++++++++++++++-- tests/models.py | 9 +++++++++ 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/eav/forms.py b/eav/forms.py index d9f5b24..78926fe 100644 --- a/eav/forms.py +++ b/eav/forms.py @@ -99,5 +99,6 @@ class BaseDynamicEntityForm(ModelForm): # Save entity and its attributes. if commit: instance.save() + self._save_m2m() return instance diff --git a/eav/managers.py b/eav/managers.py index 2531ce9..96951de 100644 --- a/eav/managers.py +++ b/eav/managers.py @@ -3,7 +3,6 @@ Managers. This module contains the custom manager used by entities registered with eav. ''' - from django.db import models from .queryset import EavQuerySet diff --git a/eav/registry.py b/eav/registry.py index eef4c24..8fe481d 100644 --- a/eav/registry.py +++ b/eav/registry.py @@ -25,7 +25,6 @@ class EavConfig(object): GenericRelation from Entity to Value. None by default. Therefore, if not overridden, it is not possible to query Values by Entities. ''' - manager_attr = 'objects' manager_only = False eav_attr = 'eav' diff --git a/tests/forms.py b/tests/forms.py index f9ff8ff..5316737 100644 --- a/tests/forms.py +++ b/tests/forms.py @@ -3,7 +3,7 @@ from django.contrib.admin.sites import AdminSite import eav from eav.admin import * -from .models import Patient +from .models import Patient, M2MModel, ExampleModel from eav.models import Attribute from eav.forms import BaseDynamicEntityForm from django.contrib import admin @@ -44,6 +44,12 @@ class PatientForm(ModelForm): fields = '__all__' +class M2MModelForm(ModelForm): + class Meta: + model = M2MModel + fields = '__all__' + + class Forms(TestCase): def setUp(self): eav.register(Patient) @@ -75,4 +81,12 @@ class Forms(TestCase): def test_invalid_submit(self): form = PatientForm(dict(color='Blue'), instance=self.instance) with self.assertRaises(ValueError): - jim = form.save() \ No newline at end of file + jim = form.save() + + + def test_m2m(self): + m2mmodel = M2MModel.objects.create(name='name') + model = ExampleModel.objects.create(name='name') + form = M2MModelForm(dict(name='Lorem', models=[model.pk]), instance=m2mmodel) + form.save() + self.assertEqual(len(m2mmodel.models.all()), 1) \ No newline at end of file diff --git a/tests/models.py b/tests/models.py index 5072f42..a3da3c2 100644 --- a/tests/models.py +++ b/tests/models.py @@ -29,3 +29,12 @@ class ExampleModel(models.Model): def __unicode__(self): return self.name + + +@register_eav() +class M2MModel(models.Model): + name = models.CharField(max_length=12) + models = models.ManyToManyField(ExampleModel) + + def __unicode__(self): + return self.name \ No newline at end of file