Hi,
I have added the code to my __init__.py file but still its not working.
__init__.py
from django.core.files.storage import default_storage as storage
from django.db.models.signals import pre_save
from django.db import models
import django.forms as forms
from django.contrib.auth.models import User
def image_delete(sender, instance, *args, **kwargs):
if instance.pk:
old_instance = User.objects.get(pk=instance.pk)
if old_instance.image != instance.image and instance.image:
storage.delete(old_instance.image.name)
pre_save.connect(image_delete, sender=User)
model.py
class User(models.Model):
first_name=models.CharField(verbose_name = "First Name
*",max_length=20,blank=False)
last_name=models.CharField(verbose_name = "Last Name
*",max_length=20,blank=False)
username=models.EmailField(verbose_name = "Email
*",max_length=30,blank=False)
password=models.CharField(verbose_name = "Password
*",max_length=15,blank=False)
dob=models.DateField(verbose_name = "DOB *" ,blank=True,null=True)
mobileno=models.CharField(verbose_name = "Mobile No
*",max_length=20,blank=False)
houseno=models.CharField(verbose_name = "House
No",max_length=10,blank=True)
address1=models.CharField(verbose_name =
"Adress1",max_length=30,blank=True)
city=models.CharField(verbose_name = "City",max_length=20,blank=True)
state=models.CharField(verbose_name = "State",max_length=30,blank=True)
pincode=models.CharField(verbose_name =
"Pincode",max_length=20,blank=True)
country=models.CharField(verbose_name =
"Country",max_length=30,blank=True)
comment=models.CharField(verbose_name =
"Comment",max_length=200,blank=True)
sex=models.CharField(verbose_name = "Sex *",max_length=5,blank=False)
image=models.FileField(verbose_name = "Image(limit 1Mb)
*",blank=True,upload_to=path_and_rename(''))
def __unicode__(self):
return self.first_name
On Tue, Mar 24, 2015 at 7:44 PM, Andreas Kuhne <[email protected]>
wrote:
> First, make sure that the whitespace is the same in all of your methods
> (in python whitespace is significant, which means that you should indent
> all files the same amount, I wrote my example in my email, so I only
> indented twice, you seem to have 4 blankspaces in your file, so make sure
> the indentation is the same).
>
> Secondly, I think that you should add the code I sent to the __init__.py
> file in the project itself (in the same directory that you have you
> models.py). That way it will be run during startup (which needs to be done).
>
> Regards,
>
> Andréas
>
> 2015-03-24 14:20 GMT+01:00 Akash Patni <[email protected]>:
>
>> i had made the changes in model .py but its not working
>>
>> here is model.py
>>
>>
>> from django.db import models
>> import django.forms as forms
>> from virtualenv import REQUIRED_FILES
>> from _mysql import NULL
>> from datetime import datetime, date, time, timedelta
>> import time
>> import calendar
>> from django.contrib.auth.models import User
>> import os
>> from uuid import uuid4
>> from django.core.files.storage import default_storage as storage
>> from django.db.models.signals import pre_save
>>
>>
>> def path_and_rename(path):
>> def wrapper(instance, filename):
>> ext = filename.split('.')[-1]
>> # get filename
>> if instance.pk:
>> filename = '{}.{}'.format(instance.pk, ext)
>> else:
>> # set filename as random string
>> filename = '{}.{}'.format(uuid4().hex, ext)
>> # return the whole path to the file
>> return os.path.join(path, filename)
>> return wrapper
>>
>> def image_delete(sender, instance, *args, **kwargs):
>> if instance.pk:
>> old_instance = User.objects.get(pk=instance.pk)
>>
>> if old_instance.image != instance.image and instance.image:
>> storage.delete(old_instance.image.name)
>>
>> pre_save.connect(image_delete, sender=User)
>>
>> class Publisher(models.Model):
>> name = models.CharField(max_length=30)
>> address = models.CharField(max_length=50)
>> city = models.CharField(max_length=60)
>> state_province = models.CharField(max_length=30)
>> country = models.CharField(max_length=50)
>> website = models.URLField()
>>
>> def __unicode__(self):
>> return self.name
>>
>> class Author(models.Model):
>> first_name = models.CharField(max_length=30)
>> last_name = models.CharField(max_length=40)
>> email = models.EmailField()
>>
>> def __unicode__(self):
>> return u'%s %s' % (self.first_name, self.last_name)
>>
>> class Book(models.Model):
>> title = models.CharField(max_length=100)
>> authors = models.ManyToManyField(Author)
>> publisher = models.ForeignKey(Publisher)
>> publication_date = models.DateField()
>>
>> def __unicode__(self):
>> return self.title
>>
>> class User(models.Model):
>> first_name=models.CharField(verbose_name = "First Name
>> *",max_length=20,blank=False)
>> last_name=models.CharField(verbose_name = "Last Name
>> *",max_length=20,blank=False)
>> username=models.EmailField(verbose_name = "Email
>> *",max_length=30,blank=False)
>> password=models.CharField(verbose_name = "Password
>> *",max_length=15,blank=False)
>> dob=models.DateField(verbose_name = "DOB *" ,blank=True,null=True)
>> mobileno=models.CharField(verbose_name = "Mobile No
>> *",max_length=20,blank=False)
>> houseno=models.CharField(verbose_name = "House
>> No",max_length=10,blank=True)
>> address1=models.CharField(verbose_name =
>> "Adress1",max_length=30,blank=True)
>> city=models.CharField(verbose_name = "City",max_length=20,blank=True)
>> state=models.CharField(verbose_name =
>> "State",max_length=30,blank=True)
>> pincode=models.CharField(verbose_name =
>> "Pincode",max_length=20,blank=True)
>> country=models.CharField(verbose_name =
>> "Country",max_length=30,blank=True)
>> comment=models.CharField(verbose_name =
>> "Comment",max_length=200,blank=True)
>> sex=models.CharField(verbose_name = "Sex *",max_length=5,blank=False)
>> image=models.FileField(verbose_name = "Image(limit 1Mb)
>> *",blank=True,upload_to=path_and_rename(''))
>>
>> def __unicode__(self):
>> return self.first_name
>>
>>
>>
>>
>> On Tue, Mar 24, 2015 at 6:47 PM, Akash Patni <[email protected]>
>> wrote:
>>
>>> is there any other changes that i have to made in model like how this
>>> above mentioned function will be call.
>>>
>>> Please suggest
>>>
>>> On Tue, Mar 24, 2015 at 6:43 PM, Andreas Kuhne <
>>> [email protected]> wrote:
>>>
>>>> Hi,
>>>>
>>>> You shouldn't do it in the view, do it in the database model instead.
>>>> It won't do anything to any other fields than the image field the way I
>>>> wrote the function (all other fields are untouched).
>>>>
>>>> The reason you shouldn't do it in the view, is because if you were to
>>>> update the image any other place than via the view, the code wouldn't run.
>>>> It's more sensible and more DRY to do it in the model.
>>>>
>>>> Regards,
>>>>
>>>> Andréas
>>>>
>>>> 2015-03-24 14:10 GMT+01:00 Akash Patni <[email protected]>:
>>>>
>>>>> Hey,
>>>>> I am new to django. I have other feilds also other than image field in
>>>>> my form, so will you please tell me how to use above mentioned function in
>>>>> edit_profile function in view, Can i call another function from another
>>>>> function in views.py, if yes please tell me
>>>>>
>>>>> On Tue, Mar 24, 2015 at 6:11 PM, Andreas Kuhne <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> Ok, so what you should do is add a signal to pre save and then delete
>>>>>> the old image if the new image is attached.
>>>>>>
>>>>>> Something like this should work:
>>>>>>
>>>>>> from django.core.files.storage import default_storage as storage
>>>>>> from django.db.models.signals import pre_save
>>>>>>
>>>>>>
>>>>>> def image_delete(sender, instance, *args, **kwargs):
>>>>>> if instance.pk:
>>>>>> old_instance = User.objects.get(pk=instance.pk)
>>>>>>
>>>>>> if old_instance.image != instance.image and instance.image:
>>>>>> storage.delete(old_instance.image.name)
>>>>>>
>>>>>> pre_save.connect(image_delete, sender=User)
>>>>>>
>>>>>> You can see more information about signals here:
>>>>>> https://docs.djangoproject.com/en/1.7/topics/signals/
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Andréas
>>>>>>
>>>>>> 2015-03-24 11:40 GMT+01:00 <[email protected]>:
>>>>>>
>>>>>>> When i edit image that is when i upload new image,the old image
>>>>>>> should get deleted
>>>>>>>
>>>>>>> On Tuesday, March 24, 2015 at 2:40:35 PM UTC+5:30,
>>>>>>> [email protected] wrote:
>>>>>>>>
>>>>>>>> hi..
>>>>>>>> Can anyone please tell me how to handle old image after uploading
>>>>>>>> new image.
>>>>>>>>
>>>>>>> --
>>>>>>> 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 http://groups.google.com/group/django-users.
>>>>>>> To view this discussion on the web visit
>>>>>>> https://groups.google.com/d/msgid/django-users/ca9fa002-cbd5-4bbf-b42c-2a6ce88e8e0c%40googlegroups.com
>>>>>>> <https://groups.google.com/d/msgid/django-users/ca9fa002-cbd5-4bbf-b42c-2a6ce88e8e0c%40googlegroups.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 a topic in
>>>>>> the Google Groups "Django users" group.
>>>>>> To unsubscribe from this topic, visit
>>>>>> https://groups.google.com/d/topic/django-users/oZrAdWgzwo0/unsubscribe
>>>>>> .
>>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>>> [email protected].
>>>>>> To post to this group, send email to [email protected].
>>>>>> Visit this group at http://groups.google.com/group/django-users.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/django-users/CALXYUbkpM6op303LMxA2iGNuzqgzB%3DjBPWw2KXkpjwdaho2Z%2BQ%40mail.gmail.com
>>>>>> <https://groups.google.com/d/msgid/django-users/CALXYUbkpM6op303LMxA2iGNuzqgzB%3DjBPWw2KXkpjwdaho2Z%2BQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> *Best Regards,*
>>>>> Akash Patni
>>>>> Software Engineer
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> *[image: ranosys] <http://ranosys.com/> [image: facebook]
>>>>> <https://www.facebook.com/ranosys>[image: twitter]
>>>>> <https://twitter.com/ranosys>[image: linkedin]
>>>>> <https://www.linkedin.com/company/741079?trk=prof-exp-company-name>[image:
>>>>> googleplus] <https://plus.google.com/+Ranosys> Head Office: Oxley Bizhub,
>>>>> #06-48 | 73 Ubi Road 1 | Singapore - 408733Tel: +65 66331556 | HP: +65
>>>>> 98573420Global Offices:San Francisco, USA | Jaipur, India | Bikaner,
>>>>> India*
>>>>>
>>>>> --
>>>>> 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 http://groups.google.com/group/django-users.
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/django-users/CANSMZiTGE4rue_LtY3YrsERGqBuy%3DoFX0eJb_9o81R_us-OibQ%40mail.gmail.com
>>>>> <https://groups.google.com/d/msgid/django-users/CANSMZiTGE4rue_LtY3YrsERGqBuy%3DoFX0eJb_9o81R_us-OibQ%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 a topic in the
>>>> Google Groups "Django users" group.
>>>> To unsubscribe from this topic, visit
>>>> https://groups.google.com/d/topic/django-users/oZrAdWgzwo0/unsubscribe.
>>>> To unsubscribe from this group and all its topics, send an email to
>>>> [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at http://groups.google.com/group/django-users.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/django-users/CALXYUb%3DxUnSdyTevvw3oSwA%2B1kpvMwBXednRxkswXMUkMdU78g%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/django-users/CALXYUb%3DxUnSdyTevvw3oSwA%2B1kpvMwBXednRxkswXMUkMdU78g%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>>
>>> --
>>> *Best Regards,*
>>> Akash Patni
>>> Software Engineer
>>>
>>>
>>>
>>>
>>> *[image: ranosys] <http://ranosys.com/> [image: facebook]
>>> <https://www.facebook.com/ranosys>[image: twitter]
>>> <https://twitter.com/ranosys>[image: linkedin]
>>> <https://www.linkedin.com/company/741079?trk=prof-exp-company-name>[image:
>>> googleplus] <https://plus.google.com/+Ranosys> Head Office: Oxley Bizhub,
>>> #06-48 | 73 Ubi Road 1 | Singapore - 408733Tel: +65 66331556 | HP: +65
>>> 98573420Global Offices:San Francisco, USA | Jaipur, India | Bikaner, India*
>>>
>>
>>
>>
>> --
>> *Best Regards,*
>> Akash Patni
>> Software Engineer
>>
>>
>>
>>
>> *[image: ranosys] <http://ranosys.com/> [image: facebook]
>> <https://www.facebook.com/ranosys>[image: twitter]
>> <https://twitter.com/ranosys>[image: linkedin]
>> <https://www.linkedin.com/company/741079?trk=prof-exp-company-name>[image:
>> googleplus] <https://plus.google.com/+Ranosys> Head Office: Oxley Bizhub,
>> #06-48 | 73 Ubi Road 1 | Singapore - 408733Tel: +65 66331556 | HP: +65
>> 98573420Global Offices:San Francisco, USA | Jaipur, India | Bikaner, India*
>>
>> --
>> 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 http://groups.google.com/group/django-users.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/django-users/CANSMZiRtfvrhxmUrw-GM4dsbakkM7ccONbHDVA4y4NCywX3aFA%40mail.gmail.com
>> <https://groups.google.com/d/msgid/django-users/CANSMZiRtfvrhxmUrw-GM4dsbakkM7ccONbHDVA4y4NCywX3aFA%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 a topic in the
> Google Groups "Django users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/django-users/oZrAdWgzwo0/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CALXYUbmecLasSsdZkk_7-uOB_5N3PVqY0i4rhbhV2o_DcDf3aQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-users/CALXYUbmecLasSsdZkk_7-uOB_5N3PVqY0i4rhbhV2o_DcDf3aQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>
--
*Best Regards,*
Akash Patni
Software Engineer
*[image: ranosys] <http://ranosys.com/> [image: facebook]
<https://www.facebook.com/ranosys>[image: twitter]
<https://twitter.com/ranosys>[image: linkedin]
<https://www.linkedin.com/company/741079?trk=prof-exp-company-name>[image:
googleplus] <https://plus.google.com/+Ranosys> Head Office: Oxley Bizhub,
#06-48 | 73 Ubi Road 1 | Singapore - 408733Tel: +65 66331556 | HP: +65
98573420Global Offices:San Francisco, USA | Jaipur, India | Bikaner, India*
--
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 http://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/CANSMZiStU51oyHFSaXeTr_GmUC1aTqF-ySePy6PNADvUDuJxEQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.