Как сбросить id при удалении строки в django?
Я хотел начать идентификатор с 1. каждый раз, когда ряд удаляется, он пропускает этот номер и переходит к следующему номеру.
как на этом изображении, он пропускает номера от 1-6 и 8.
я хочу установить его как 1,2,3
вот мой models.py
class dish(models.Model):
id = models.AutoField(primary_key=True)
dish_id = models.AutoField
dish_name = models.CharField(max_length=255, blank=True, null=True)
dish_category = models.CharField(max_length=255, blank=True, null=True)
dish_size = models.CharField(max_length=7, blank=True, null=True)
dish_price = models.IntegerField(blank=True, null=True)
dish_description = models.CharField(max_length=255, blank=True, null=True)
# dish_image = models.ImageField(upload_to="images/", default=None, blank=True, null=True)
dish_image = models.ImageField(upload_to="media/", default=None, blank=True, null=True) #here added images as a foldername to upload to.
dish_date = models.DateField()
def __str__(self):
return self.dish_name
это views.py
def delete(request, id):
dishs = dish.objects.get(id=id)
dishs.delete()
return HttpResponseRedirect(reverse('check'))
Удаление объекта не изменяет ни одного свойства оставшихся объектов. Вам необходимо сделать это вручную. Первое, что вам нужно сделать, это изменить поле dish_id
:
# Change this:
# dish_id = models.AutoField
# to this:
dish_id = models.IntegerField(default=0)
Тогда в ваших представлениях:
def delete(request, id):
dishs = dish.objects.get(id=id)
dishs.delete()
all_dishes = dish.objects.all()
for i, dish in enumerate(all_dishes):
dish.dish_id = i + 1
dish.save()
return HttpResponseRedirect(reverse('check'))
Отдельно следует отметить, что вы действительно должны писать свои классы в регистре Паскаля, с заглавной буквы класса:
class Dish(models.Model):
И, наконец, Dish
не нуждается в поле id; оно создается автоматически, но вы можете оставить его как есть, оно не вызывает никаких проблем.
Вы можете достичь этих вещей, переопределив метод save() следующим образом
class dish(models.Model):
id =models.AutoField(primary_key=True)
dish_id = models.BigIntegerField(unique = True)
dish_name = models.CharField(max_length=255, blank=True, null=True)
dish_category = models.CharField(max_length=255, blank=True, null=True)
dish_size = models.CharField(max_length=7, blank=True, null=True)
dish_price = models.IntegerField(blank=True, null=True)
dish_description = models.CharField(max_length=255, blank=True, null=True)
dish_image = models.ImageField(upload_to="images/", default=None, blank=True, null=True)
dish_image = models.ImageField(upload_to="media/", default=None, blank=True, null=True) #here added images as a foldername to upload to.
dish_date = models.DateField()
def __str__(self):
return self.dish_name
def save(self, *args, **kwargs):
count_obj = dish.objects.all().count()+1
self.dish_id = count_obj
super(dish, self).save(*args, **kwargs)