I think you made a typo in the code. doctor can't be a Foreign key for class Doctor. Anyway I get your point, and this is the same way I solved it yesterday.
On Wed, 28 Nov, 2018, 11:07 AM Saurabh Agrawal <[email protected] wrote: > >> >> >> 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 > <https://groups.google.com/d/msgid/django-users/CAL1UH0s7vMZ%3DWrU%2BJCwVMVzeQWkfAUM9p_KCgfhDQX7Nuv-GSQ%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/CAA%3Diw_8ObhXgL-n%3Dkd5-8RN9En_z9td8UPrefWmQXt7we21tTA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

