I am trying to resolve a bug in the API from a code i inherited. I am new to Django and tastypie so i don't know how to resolved this. I have imported my model but i do not know why i am getting DoesNotExist exception. In the save function default_drawing is set to true. I think this prevents the user from manual setting it to true
from erma_drawing import models as erma_drawing_models
def hydrate(self, bundle):
'''
Hydrate things
'''
try:
bundle.obj.profile = erma_drawing_models.DrawingProfile.objects.get(default_drawing=True)
except DrawingProfile.DoesNotExist:
logger.error("Drawing Profile does not exist")
return super().hydrate(bundle)
Model.py
class DrawingProfile(models.Model):
name = models.CharField(
max_length=32, null=False, blank=False, unique=True)
privilege = models.ForeignKey(
'erma_authorization.Privilege',
on_delete=models.PROTECT,
null=True,
blank=True,
help_text='The privilege required to' +
' create new drawings that use this profile')
default_drawing = models.BooleanField(
default=False, null=False, blank=False)
def __init__(self, *args, **kwargs):
super(DrawingProfile, self).__init__(*args, **kwargs)
def save(self, *args, **kwargs):
if kwargs.pop('data_load', False):
return super().save(*args, **kwargs)
default_drawing = None
existing_record = None
if not self._state.adding:
existing_record = DrawingProfile.objects.get(pk=self.pk)
force = kwargs.pop('force', False)
# Remove the ability to change the default without the force argument
#this prevents users from changing the default, without setting a new record as default.
if not force and existing_record.default_drawing:
self.default_drawing = True
if self.default_drawing and not existing_record.default_drawing:
default_drawing = DrawingProfile.objects.get(
default_drawing=True)
# This should never happen, but we'll make sure anyways...
if default_drawing.pk != self.pk:
default_drawing.default_drawing = False
super(DrawingProfile, self).save(*args, **kwargs)
default_drawing.save(force=True)
else:
super(DrawingProfile, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
# Never delete the default drawing object.
if self.default_drawing:
raise Exception('Cannot delete the default drawing')
default_drawing = DrawingProfile.objects.get(default_drawing=True)
# Update any existing drawings that use this profile to use the
# default drawing profile instead
drawings = self.drawing_set.all()
if len(drawings):
for record in drawings:
record.profile = default_drawing
record.save(fast=True)
DrawingProfile.objects.get(pk=self.pk).delete()
else:
return super(DrawingProfile, self).delete(*args, **kwargs)
class Meta:
db_table = 'drawing_profile'
ordering = ['id']