Ignore the last post. Formatting blues in my main editor. On Wed, 28 Nov, 2018, 11:34 AM Joel <[email protected] wrote:
> 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_8p420iBYmK8hoVZgqX_FjLu__8ONNBXm%2BENJouaC8uTA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

