0

I have been working on a dog adoption website which I have been builing on my local host in python using the Django framework. I have a python page which uses the pre-save function to create a unique slug for the dog whenever one is created. I have now deployed my website and this works absolutely fine. However, as of today this seems to have stopped working on my local host. I cannot find any reason why and it uses the same code as the deployed version of the system. Has anyone ever experience this before and if so does anyone have a solution as I would like to keep working and maintaining on my localhost.

class Dogs(models.Model):
    dog_id = models.AutoField(primary_key=True)
    dog_name = models.CharField(max_length=100)
    dog_slug = models.SlugField(unique=True, null=True, blank=True)
    breed = models.ForeignKey(Dog_breed, on_delete=models.CASCADE)
    dogs_image = models.ImageField(upload_to='media/')
    description = models.TextField(default="Description information to be added soon")
    dog_illness_disability = models.BooleanField(null=True, blank=True)
    can_live_with_cats = models.BooleanField(null=True, blank=True)
    can_live_with_dogs = models.BooleanField(null=True, blank=True)
    can_be_with_children = models.BooleanField(null=True, blank=True)
    hours_excercise_required = models.IntegerField(default=0)
    dog_sociability = models.IntegerField(default=0)
    can_be_left_alone = models.IntegerField(default=0)
    weight_kg = models.FloatField(default=0)
    size_range = models.IntegerField(default=0)
    affection_level = models.IntegerField(default=0)
    training_level = models.IntegerField(default=0)
    energy_level = models.IntegerField(default=0)
    age = models.IntegerField(default=0)
    age_range = models.IntegerField(default=0)
    male_female = models.BooleanField(null=True, blank=True)
    neutered = models.BooleanField(null=True, blank=True)

slugify.py:

def unique_slug(instance, generated_slug = None):
    if generated_slug is not None: 
        slug = generated_slug
    else:
        slug = slugify(instance.dog_name)   
    #check if a dog with that slug already exists. If so generate a random string of numbers and characters to create a unique slug
    qs = Dogs.objects.filter(dog_slug=slug).exclude(dog_id=instance.dog_id)
    if qs.exists():
        random_str = get_random_string(length=4)
        random_num = random.randint(100_00, 500_000)
        slug = f"{slug}-{random_num}-{random_str}"
        return unique_slug(instance, generated_slug=slug)
    return slug
   
def pre_save_receiver(sender, instance, *args, **kwargs): 
   if not instance.dog_slug: 
       instance.dog_slug = unique_slug(instance) 

pre_save.connect(pre_save_receiver, sender = Dogs) 

1 Answers1

0

try this one:

from django.utils.text import slugify

def unique_slug(self, *args, **kwargs):
    self.slug = slugify(self.dog_name)
    super(Dogs, self).save(*args, **kwargs)

You should know how to generate random number to each and every dog that is created, since, you are asking for the slugify, you can use the one I gave you above.

Don Boss
  • 15
  • 7