diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-04-09 14:03:37 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-04-09 14:04:25 +0200 |
commit | dd86e0ee72238699d4836779f6c64d5483c6fce0 (patch) | |
tree | 48a7100f357411f7598593c438c12caade081bde | |
parent | 378b8bd35ee8b33e28cf39c780696b754353f142 (diff) | |
download | Ishtar-dd86e0ee72238699d4836779f6c64d5483c6fce0.tar.bz2 Ishtar-dd86e0ee72238699d4836779f6c64d5483c6fce0.zip |
QA: fix add to basket when shared with several users - preserve basket order on duplicate
-rw-r--r-- | archaeological_finds/forms.py | 2 | ||||
-rw-r--r-- | archaeological_finds/models_finds.py | 8 | ||||
-rw-r--r-- | ishtar_common/models.py | 10 |
3 files changed, 13 insertions, 7 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 843d082fe..7cbbca81c 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -752,7 +752,7 @@ class QAFindBasketForm(IshtarForm): def save(self, items): if self.cleaned_data['qa_bf_create_or_update'] == 'update': q = Q(user=self.user) | Q(shared_write_with__pk=self.user.pk) - basket = models.FindBasket.objects.filter(q).get( + basket = models.FindBasket.objects.filter(q).distinct().get( pk=self.cleaned_data['qa_bf_basket']) else: label = self.cleaned_data['qa_bf_label'].strip() diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 328821386..25563edd0 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -55,13 +55,13 @@ from archaeological_warehouse.models import Warehouse class MaterialType(HierarchicalType): - code = models.CharField(_(u"Code"), max_length=10, blank=True, null=True) - recommendation = models.TextField(_(u"Recommendation"), blank=True, + code = models.CharField(_("Code"), max_length=10, blank=True, null=True) + recommendation = models.TextField(_("Recommendation"), blank=True, null=True) class Meta: - verbose_name = _(u"Material type") - verbose_name_plural = _(u"Material types") + verbose_name = _("Material type") + verbose_name_plural = _("Material types") ordering = ('label',) diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 9b446ff9e..b804739ad 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -5021,7 +5021,13 @@ class Basket(FullSearch, OwnPerms, ValueGetter, TemplateItem): :param ishtaruser: if provided an alternate user is used :return: the new basket """ - items = list(self.items.all()) + items = [] + through = self.items.through + basket_pk = "{}_id".format(self.SLUG) + item_pk = "{}_id".format(self.items.model.SLUG) + q = through.objects.filter(**{basket_pk: self.pk}) + for r in q.values("pk", item_pk).order_by("pk").all(): + items.append(r[item_pk]) new_item = self new_item.pk = None if ishtaruser: @@ -5034,7 +5040,7 @@ class Basket(FullSearch, OwnPerms, ValueGetter, TemplateItem): new_item.label = label new_item.save() for item in items: - new_item.items.add(item) + through.objects.create(**{basket_pk: new_item.pk, item_pk: item}) return new_item |