Django: Изменение значения определенных полей в предыдущих экземплярах модели при возникновении определенного экземпляра
Я создаю небольшой проект django. Есть ли способ изменить значение определенных полей в предыдущих экземплярах конкретной модели?
class Fruit (models.Model):
name=models.CharField(max_length=40)
amount=models.IntegerField()
Например, у меня есть три экземпляра моей модели.
[0 Object{ "model": "Fruit","pk": 1,"fields": {"name": "Banana", "amount": "2"}},
1 Object{ "model": "Fruit","pk": 2,"fields": {"name": "Apple", "amount": "2"}},
2 Object{ "model": "Fruit","pk": 3,"fields": {"name": "Mango", "amount": "1"}}]
И я решил, что четвертый экземпляр будет Orange в количестве 3.
[0 Object{ "model": "Fruit","pk": 1,"fields": {"name": "Banana", "amount": "2"}},
1 Object{ "model": "Fruit","pk": 2,"fields": {"name": "Orange", "amount": "2"}},
2 Object{ "model": "Fruit","pk": 3,"fields": {"name": "Orange", "amount": "1"}}
3 Object{ "model": "Fruit","pk": 4,"fields": {"name": "Orange", "amount": "3"}}]
Как вы видите, моя цель - изменить все предыдущие названия фруктов на Orange в случае создания экземпляра с Orange в качестве имени пока не появится Banana, чтобы banana оставался неизменным.
Есть ли способ сделать что-то подобное?
вы можете зациклить ваш объект Fruit
и изменить все имена на основе условия
for item in Fruit.objects.all():
if item.name == "Banana":
pass
else:
Fruit.objects.update(..update values)
После создания нового экземпляра можно перебирать все экземпляры в обратном порядке, пока не будет найдено ключевое слово (например, "Banana"). Смотрите документацию для обратного метода. Прервите цикл, если ключевое слово найдено, иначе измените название фрукта (например, на "Апельсин").
for fruit in Fruit.objects.all().reverse():
if fruit.name == "Banana":
break
else:
fruit.name = "Orange"
fruit.save()
Это решение предполагает, что вы хотите внести изменения сразу после создания экземпляра (поэтому в вашем примере четвертый экземпляр будет последним).