Make deletion not required, use deepcopy

This commit is contained in:
Stefan Wehrmeyer 2022-03-23 12:58:01 +01:00
parent 1497678f71
commit 0a0e162910
3 changed files with 37 additions and 25 deletions

View file

@ -204,13 +204,20 @@ class GovernmentPlanAdmin(admin.ModelAdmin):
if request.method == "POST":
proposals = obj.proposals or {}
proposal_id = request.POST.get("proposal_id")
delete_proposals = request.POST.getlist("proposal_delete")
update = None
if proposal_id:
data = proposals[proposal_id]["data"]
form = GovernmentPlanUpdateAcceptProposalForm(data=data, plan=obj)
if form.is_valid():
update = form.save(
proposal_id=proposal_id,
delete_proposals=request.POST.getlist("proposal_delete"),
delete_proposals=delete_proposals,
)
else:
form = GovernmentPlanUpdateAcceptProposalForm(data={}, plan=obj)
form.delete_proposals(delete_proposals)
if update is None:
self.message_user(request, _("The proposal has been deleted."))

View file

@ -1,3 +1,5 @@
import copy
from django import forms
from django.contrib.auth import get_user_model
from django.utils import timezone
@ -141,7 +143,7 @@ class GovernmentPlanUpdateAcceptProposalForm(GovernmentPlanUpdateProposalForm):
super().__init__(*args, **kwargs)
def get_proposals(self):
data = dict(self.plan.proposals)
data = copy.deepcopy(self.plan.proposals)
user_ids = self.plan.proposals.keys()
user_map = {
str(u.id): u for u in get_user_model().objects.filter(id__in=user_ids)
@ -173,12 +175,15 @@ class GovernmentPlanUpdateAcceptProposalForm(GovernmentPlanUpdateProposalForm):
proposal_user = proposals[proposal_id]["user"]
update.user = proposal_user
delete_proposals.append(proposal_id)
self.delete_proposals(delete_proposals)
update.save()
return update
def delete_proposals(self, delete_proposals):
for pid in delete_proposals:
if pid in self.plan.proposals:
del self.plan.proposals[pid]
if not self.plan.proposals:
self.plan.proposals = None
self.plan.save(update_fields=["proposals"])
update.save()
return update

View file

@ -29,7 +29,7 @@
{% for key, proposal in proposals.items %}
<td>
<label>
<input type="radio" name="proposal_id" class="proposal" value="{{ key }}" required>
<input type="radio" name="proposal_id" class="proposal" value="{{ key }}">
{% trans "Turn into update draft" %}
</label>
</td>