>
>
>
>
> class Doctor(models.Model):
>
> name = models.CharField(max_length=35)
>
> username = models.CharField(max_length=15)
>
>
>
> class DoctorProfilePic (models.Model):
>
> name = models.CharField(max_length=255, blank=True)
>
> pic = StdImageField(upload_to="data/media/%Y/%m/%d", blank=True,
> variations={
>
> 'large': (600, 400),
>
> 'thumbnail': (150, 140, True),
>
> 'medium': (300, 200),
>
> })
>
> doctor = models.OneToOneField(Doctor, blank=True,
>
> null=True, on_delete=models.SET_NULL,
> related_name="profile_pic")
>
>
>
Setting on_delete to SET_NULL doesn't make much sense here, I think. This
implies that if a doctor is deleted, the profile pic will be preserved,
with the FK to doc being set to NULL in db (which doesn't seem desirable).
I think here CASCADE should work good and will not have the issue that the
OP is facing.
>
>
> …and after saying all that, I wouldn’t make a separate model for the
> profile picture. This is what I would do:
>
> class Doctor(models.Model):
>
> name = models.CharField(max_length=35)
>
> username = models.CharField(max_length=15)
>
> profile_pic = StdImageField(upload_to="data/media/%Y/%m/%d",
> blank=True, variations={
>
> 'large': (600, 400),
>
> 'thumbnail': (150, 140, True),
>
> 'medium': (300, 200),
>
> })
>
>
>
>
>
>
>
> *From:* [email protected] [mailto:
> [email protected]] *On Behalf Of *Joel Mathew
> *Sent:* Tuesday, November 27, 2018 12:24 PM
> *To:* [email protected]
> *Subject:* Unexpected behavior on delete of model
>
>
>
> Situation:
>
>
>
> I have two Model classes, in two different apps which are part of the same
> project. class doctor defined in appointments.models is a set of attributes
> associated with a doctor, like name, username, email, phone etc. class
> DoctorProfilePic is a Model defined in clinic.models, which has a
> StdImageField which stores images. doctor has a One to One mapping to
> DoctorProfilePic.
>
>
>
> class doctor(models.Model):
>
> docid = models.AutoField(primary_key=True, unique=True) # Need
> autoincrement, unique and primary
>
> name = models.CharField(max_length=35)
>
> username = models.CharField(max_length=15)
>
> ...
>
> profilepic = models.ForeignKey(DoctorProfilePic, blank=True,
> null=True, on_delete=models.CASCADE)
>
> ...
>
>
>
> class DoctorProfilePic (models.Model):
>
> id = models.AutoField(primary_key=True, unique=True)
>
> name = models.CharField(max_length=255, blank=True)
>
> pic = StdImageField(upload_to="data/media/%Y/%m/%d", blank=True,
> variations={
>
> 'large': (600, 400),
>
> 'thumbnail': (150, 140, True),
>
> 'medium': (300, 200),
>
> })
>
> doc = models.ForeignKey('appointments.doctor', blank=True,
>
> null=True, on_delete=models.CASCADE)
>
>
>
> Anticipated response:
>
>
>
> When user selects one of the profile pics from a selection box, and clicks
> Delete, django is supposed to delete the picture from the collection of
> pictures uploaded by the doctor.
>
>
>
> Problem:
>
>
>
> When the delete button is clicked, django deletes both the picture and the
> doctor, instead of just the former.
>
>
>
> Code:
>
>
>
> def removeprofpic(request, docid):
>
> docid = int(docid)
>
> if not IsOwnerorSuperUser(request, docid):
>
> return HttpResponse("You dont have permissions to do this.")
>
> doc = doctor.objects.get(docid = docid)
>
> if request.method == 'POST':
>
> print(request.POST)
>
> picid = int(request.POST.get('profilepic'))
>
> print(f'doc:{doc} picid:{picid}')
>
> pic = DoctorProfilePic.objects.get(doc = doc, id =picid)
>
> pic.delete()
>
> msg = f"Successfully removed profile picture."
>
> else:
>
> msg = "Not a valid POST"
>
> return HttpResponse(msg)
>
>
>
> Now I'm guessing my problem is in defining the on_delete=models.CASCADE?
> Can someone explain what I've done wrong?
>
> Sincerely yours,
>
> Joel G Mathew
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CAA%3Diw__vyDXxz6sfmcS_Bcy8M5cANmB7mwmTMwS4rfF96bJmbg%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-users/CAA%3Diw__vyDXxz6sfmcS_Bcy8M5cANmB7mwmTMwS4rfF96bJmbg%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/360df97b2ca14af69267bd6e98436ac6%40iss2.ISS.LOCAL
> <https://groups.google.com/d/msgid/django-users/360df97b2ca14af69267bd6e98436ac6%40iss2.ISS.LOCAL?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/CAL1UH0s7vMZ%3DWrU%2BJCwVMVzeQWkfAUM9p_KCgfhDQX7Nuv-GSQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.