Похоже, что моя функция presave slugify перестала работать на localhost, но не на развернутой версии? Случалось ли это с кем-нибудь еще?
Я работаю над сайтом по усыновлению собак, который я создал на своем локальном хосте на python с использованием фреймворка Django. У меня есть страница python, которая использует функцию pre-save для создания уникального slug для собаки, когда она создается. Сейчас я развернул свой сайт, и он работает абсолютно нормально. Однако с сегодняшнего дня эта функция, похоже, перестала работать на моем локальном хосте. Я не могу найти причину этого, и он использует тот же код, что и развернутая версия системы. Кто-нибудь сталкивался с подобным, и если да, то есть ли у кого-нибудь решение, поскольку я хотел бы продолжать работать и поддерживать сайт на моем локальном хосте.
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)
попробуйте вот это:
from django.utils.text import slugify
def unique_slug(self, *args, **kwargs):
self.slug = slugify(self.dog_name)
super(Dogs, self).save(*args, **kwargs)
Вы должны знать, как генерировать случайное число для каждой создаваемой собаки, поскольку вы спрашиваете о slugify, вы можете использовать тот, который я дал вам выше.