Reputation: 61
What I am trying to do : I am trying to update the LogDone object in my view when the form is save.
The logdone was already created before, I want to use the id of the logdone previously created and update instead of creating a new one.
def create_logdone(request, logmessage_id, log_id, token ):
log = get_object_or_404(LogBook, pk=log_id)
logmessages = get_object_or_404(LogMessage, pk=logmessage_id, logbook=log)
logdone = LogDone.objects.update_or_create(logmessage=logmessages)
form = CreateLogDone(request.POST)
if request.method == "POST":
if form.is_valid():
instance = form.save(commit=False)
instance.done_by = request.user
instance.logmessage = logdone
instance.save()
Error I get
"LogDone.logmessage" must be a "LogMessage" instance.
Upvotes: 1
Views: 60
Reputation: 477794
You pass it as instance to the CreateLogDone
form:
def create_logdone(request, logmessage_id, log_id, token ):
log = get_object_or_404(LogBook, pk=log_id)
logmessage = get_object_or_404(LogMessage, pk=logmessage_id, logbook=log)
logdone, __ = LogDone.objects.update_or_create(logmessage=logmessage)
form = CreateLogDone(request.POST, instance=logdone)
if request.method == "POST":
if form.is_valid():
form.instance.done_by = request.user
form.save()
# …
# …
Note: Usually a
Form
or aModelForm
ends with a…Form
suffix, to avoid collisions with the name of the model, and to make it clear that we are working with a form. Therefore it might be better to useCreateLogDoneForm
instead of.CreateLogDone
Upvotes: 1