Как сбросить id при удалении строки в django?

Я хотел начать идентификатор с 1. каждый раз, когда ряд удаляется, он пропускает этот номер и переходит к следующему номеру. enter image description here

как на этом изображении, он пропускает номера от 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)
     
Вернуться на верх