I get an error using with using form.save(commit=False) and I cannot figure out what I'm doing wrong.
My view looks something like this:
views.py
def make_electable(request, election_id):
election = get_object_or_404(CommissionElection, id=election_id)
if request.method == 'POST':
form = MakeElectable(request.POST)
if form.is_valid():
electable = form.save(commit=False)
electable.election.set(election)
form.save()
forms.py
class MakeElectable(forms.ModelForm):
class Meta:
model = ElectablePerson
fields = ['commission',]
commission = forms.ModelChoiceField(queryset=Commissie.objects.all(), widget=forms.RadioSelect())
models.py
class CommissionElection(models.Model):
title = models.CharField(max_length=64)
commission = models.ManyToManyField(Commissie)
electable_time = DateRangeField()
voting_time = DateRangeField()
class ElectablePerson(models.Model):
commission = models.CharField(max_length=128)
election = models.ManyToManyField(CommissionElection)
The error I get is:
"<ElectablePerson: ElectablePerson object (None)>" needs to have a value for field "id" before this many-to-many relationship can be used.
I don't see why the object is None. I suspect it has something to do with the manytomanyfield.
A many to many field is a table which uses 'id_electable, id_election' as keys, with commit=false, you don't persist which gives you no id. Following code should fix your issue.
if form.is_valid():
electable = form.save()
electable.election.add(election)
Also see https://docs.djangoproject.com/en/dev/ref/models/relations/#django.db.models.fields.related.RelatedManager.add for many to many relations.