python - Django ModelForm ManyToManyField isn't able to update selected values -
i building first project in django 1.8 python 3.4. have following model called lid in models.py:
class lid(models.model): ... vereniging = models.manytomanyfield(vereniging, blank=true)
i use following modelform, forms.py
class lidform(forms.modelform): class meta: model = lid exclude = []
when use modelform create form make new object, multiple select box appears , able select multipe vereniging objects. view in views.py:
def add_lid(request): if request.method == 'post': form = lidform(request.post, request.files) if form.is_valid(): form.save() messages.success(request, 'succes.') return httpresponseredirect(reverse('leden:home')) else: form = lidform() return render(request, 'leden/lid/addlid.html', {'formset': form})
when want edit objects however, not able change selected selected vereniging objects.
def edit_lid(request, lid_id): lid = get_object_or_404(lid, pk=lid_id) if request.method == 'post': form = lidform(request.post, request.files, instance=lid) if form.is_valid(): nieuwlid = form.save(commit=false) nieuwlid.inschrijving_oras = lid.inschrijving_oras nieuwlid.save() messages.success(request, 'success.') return httpresponseredirect(reverse('leden:lid', kwargs={'lid_id': lid_id})) else: form = lidform(instance=lid) return render(request, 'leden/lid/editlid.html', {'formset': form, 'lid': lid})
so problem: when using modelform, able set manytomany relationships when creating object. not able update these m2m relationships. know doing wrong?
use save_m2m()
. the docs:
another side effect of using
commit=false
seen when model has many-to-many relation model. if model has many-to-many relation , specifycommit=false
when save form, django cannot save form data many-to-many relation. because isn’t possible save many-to-many data instance until instance exists in database.to work around problem, every time save form using
commit=false
, django addssave_m2m()
methodmodelform
subclass. after you’ve manually saved instance produced form, can invokesave_m2m()
save many-to-many form data.
Comments
Post a Comment