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.

Reply via email to