Make deletion not required, use deepcopy
This commit is contained in:
parent
1497678f71
commit
0a0e162910
3 changed files with 37 additions and 25 deletions
|
|
@ -204,28 +204,35 @@ class GovernmentPlanAdmin(admin.ModelAdmin):
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
proposals = obj.proposals or {}
|
proposals = obj.proposals or {}
|
||||||
proposal_id = request.POST.get("proposal_id")
|
proposal_id = request.POST.get("proposal_id")
|
||||||
data = proposals[proposal_id]["data"]
|
delete_proposals = request.POST.getlist("proposal_delete")
|
||||||
form = GovernmentPlanUpdateAcceptProposalForm(data=data, plan=obj)
|
update = None
|
||||||
if form.is_valid():
|
if proposal_id:
|
||||||
update = form.save(
|
data = proposals[proposal_id]["data"]
|
||||||
proposal_id=proposal_id,
|
form = GovernmentPlanUpdateAcceptProposalForm(data=data, plan=obj)
|
||||||
delete_proposals=request.POST.getlist("proposal_delete"),
|
if form.is_valid():
|
||||||
)
|
update = form.save(
|
||||||
if update is None:
|
proposal_id=proposal_id,
|
||||||
self.message_user(request, _("The proposal has been deleted."))
|
delete_proposals=delete_proposals,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
form = GovernmentPlanUpdateAcceptProposalForm(data={}, plan=obj)
|
||||||
|
form.delete_proposals(delete_proposals)
|
||||||
|
|
||||||
return redirect(plan_url)
|
if update is None:
|
||||||
|
self.message_user(request, _("The proposal has been deleted."))
|
||||||
|
|
||||||
self.message_user(
|
return redirect(plan_url)
|
||||||
request,
|
|
||||||
_("An unpublished update has been created."),
|
self.message_user(
|
||||||
)
|
request,
|
||||||
update_url = reverse(
|
_("An unpublished update has been created."),
|
||||||
"admin:froide_govplan_governmentplanupdate_change",
|
)
|
||||||
args=(update.pk,),
|
update_url = reverse(
|
||||||
current_app=self.admin_site.name,
|
"admin:froide_govplan_governmentplanupdate_change",
|
||||||
)
|
args=(update.pk,),
|
||||||
return redirect(update_url)
|
current_app=self.admin_site.name,
|
||||||
|
)
|
||||||
|
return redirect(update_url)
|
||||||
else:
|
else:
|
||||||
form = GovernmentPlanUpdateAcceptProposalForm(plan=obj)
|
form = GovernmentPlanUpdateAcceptProposalForm(plan=obj)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import copy
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
@ -141,7 +143,7 @@ class GovernmentPlanUpdateAcceptProposalForm(GovernmentPlanUpdateProposalForm):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
def get_proposals(self):
|
def get_proposals(self):
|
||||||
data = dict(self.plan.proposals)
|
data = copy.deepcopy(self.plan.proposals)
|
||||||
user_ids = self.plan.proposals.keys()
|
user_ids = self.plan.proposals.keys()
|
||||||
user_map = {
|
user_map = {
|
||||||
str(u.id): u for u in get_user_model().objects.filter(id__in=user_ids)
|
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"]
|
proposal_user = proposals[proposal_id]["user"]
|
||||||
update.user = proposal_user
|
update.user = proposal_user
|
||||||
delete_proposals.append(proposal_id)
|
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:
|
for pid in delete_proposals:
|
||||||
if pid in self.plan.proposals:
|
if pid in self.plan.proposals:
|
||||||
del self.plan.proposals[pid]
|
del self.plan.proposals[pid]
|
||||||
if not self.plan.proposals:
|
if not self.plan.proposals:
|
||||||
self.plan.proposals = None
|
self.plan.proposals = None
|
||||||
self.plan.save(update_fields=["proposals"])
|
self.plan.save(update_fields=["proposals"])
|
||||||
|
|
||||||
update.save()
|
|
||||||
return update
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
{% for key, proposal in proposals.items %}
|
{% for key, proposal in proposals.items %}
|
||||||
<td>
|
<td>
|
||||||
<label>
|
<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" %}
|
{% trans "Turn into update draft" %}
|
||||||
</label>
|
</label>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue