diff --git a/cookbook/models.py b/cookbook/models.py
index 7a7891d0..a84b943c 100644
--- a/cookbook/models.py
+++ b/cookbook/models.py
@@ -82,31 +82,34 @@ class TreeManager(MP_NodeManager):
# model.Manager get_or_create() is not compatible with MP_Tree
def get_or_create(self, *args, **kwargs):
kwargs['name'] = kwargs['name'].strip()
-
- if obj := self.filter(name__iexact=kwargs['name'], space=kwargs['space']).first():
- return obj, False
+ if hasattr(self, 'space'):
+ if obj := self.filter(name__iexact=kwargs['name'], space=kwargs['space']).first():
+ return obj, False
else:
- with scopes_disabled():
- try:
- defaults = kwargs.pop('defaults', None)
- if defaults:
- kwargs = {**kwargs, **defaults}
- # ManyToMany fields can't be set this way, so pop them out to save for later
- fields = [field.name for field in self.model._meta.get_fields() if issubclass(type(field), ManyToManyField)]
- many_to_many = {field: kwargs.pop(field) for field in list(kwargs) if field in fields}
- obj = self.model.add_root(**kwargs)
- for field in many_to_many:
- field_model = getattr(obj, field).model
- for related_obj in many_to_many[field]:
- if isinstance(related_obj, User):
- getattr(obj, field).add(field_model.objects.get(id=related_obj.id))
- else:
- getattr(obj, field).add(field_model.objects.get(**dict(related_obj)))
- return obj, True
- except IntegrityError as e:
- if 'Key (path)' in e.args[0]:
- self.model.fix_tree(fix_paths=True)
- return self.model.add_root(**kwargs), True
+ if obj := self.filter(name__iexact=kwargs['name']).first():
+ return obj, False
+
+ with scopes_disabled():
+ try:
+ defaults = kwargs.pop('defaults', None)
+ if defaults:
+ kwargs = {**kwargs, **defaults}
+ # ManyToMany fields can't be set this way, so pop them out to save for later
+ fields = [field.name for field in self.model._meta.get_fields() if issubclass(type(field), ManyToManyField)]
+ many_to_many = {field: kwargs.pop(field) for field in list(kwargs) if field in fields}
+ obj = self.model.add_root(**kwargs)
+ for field in many_to_many:
+ field_model = getattr(obj, field).model
+ for related_obj in many_to_many[field]:
+ if isinstance(related_obj, User):
+ getattr(obj, field).add(field_model.objects.get(id=related_obj.id))
+ else:
+ getattr(obj, field).add(field_model.objects.get(**dict(related_obj)))
+ return obj, True
+ except IntegrityError as e:
+ if 'Key (path)' in e.args[0]:
+ self.model.fix_tree(fix_paths=True)
+ return self.model.add_root(**kwargs), True
class TreeModel(MP_Node):
diff --git a/cookbook/views/api.py b/cookbook/views/api.py
index a77ea5ca..9681f17c 100644
--- a/cookbook/views/api.py
+++ b/cookbook/views/api.py
@@ -250,6 +250,9 @@ class MergeMixin(ViewSetMixin):
isTree = False
try:
+ if isinstance(source, Food):
+ FoodProperty.objects.filter(food=source).delete()
+
for link in [field for field in source._meta.get_fields() if issubclass(type(field), ForeignObjectRel)]:
linkManager = getattr(source, link.get_accessor_name())
related = linkManager.all()
@@ -279,6 +282,7 @@ class MergeMixin(ViewSetMixin):
source.delete()
return Response(content, status=status.HTTP_200_OK)
except Exception:
+ traceback.print_exc()
content = {'error': True,
'msg': _(f'An error occurred attempting to merge {source.name} with {target.name}')}
return Response(content, status=status.HTTP_400_BAD_REQUEST)
diff --git a/recipes/settings.py b/recipes/settings.py
index d05d0373..479bf144 100644
--- a/recipes/settings.py
+++ b/recipes/settings.py
@@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/2.0/ref/settings/
"""
import ast
import json
+import mimetypes
import os
import re
import sys
@@ -519,3 +520,5 @@ EMAIL_USE_SSL = bool(int(os.getenv('EMAIL_USE_SSL', False)))
DEFAULT_FROM_EMAIL = os.getenv('DEFAULT_FROM_EMAIL', 'webmaster@localhost')
ACCOUNT_EMAIL_SUBJECT_PREFIX = os.getenv(
'ACCOUNT_EMAIL_SUBJECT_PREFIX', '[Tandoor Recipes] ') # allauth sender prefix
+
+mimetypes.add_type("text/javascript", ".js", True)
\ No newline at end of file
diff --git a/vue/src/apps/RecipeView/RecipeView.vue b/vue/src/apps/RecipeView/RecipeView.vue
index 59d9f953..b13fbce3 100644
--- a/vue/src/apps/RecipeView/RecipeView.vue
+++ b/vue/src/apps/RecipeView/RecipeView.vue
@@ -137,9 +137,7 @@