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.

Reply via email to