0

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']
Arthur Decker
  • 1,191
  • 3
  • 15
  • 45
  • Does this answer your question? [Django DoesNotExist](https://stackoverflow.com/questions/16181188/django-doesnotexist) – JPG Aug 13 '20 at 18:43
  • also, [`DoesNotExist` -- django doc](https://docs.djangoproject.com/en/3.0/ref/models/class/#django.db.models.Model.DoesNotExist) – JPG Aug 13 '20 at 18:44

1 Answers1

1
default_drawing = models.BooleanField(default=False, null=False, blank=False)

This is set default set to False in your model. Do you know of any models that have it set to True at the moment? You're getting DoesNotExist because you don't have any DrawingProfile models with default_drawing field set to True.

Harben
  • 1,802
  • 1
  • 11
  • 16
  • @Harden i have updated the code. Under the save function is has a statement to set default_drawing to true `self.default_drawing = True` – Arthur Decker Aug 13 '20 at 19:27