Python, Django: альтернатива необработанному sql-запросу

#python #sql #django #django-queryset

#питон #sql #джанго #django-queryset

Вопрос:

Добрый вечер,

Я хотел бы спросить, существует ли другой метод, отличный от необработанного SQL-запроса, для обновления элементов по определенному условию внутри моего views.py ? Например, я знаю, что мог бы выполнить запрос insert следующим образом:

models.py

 class Person(models.Model):
    name = models.CharField()
    age = models.IntegerField()
    value = models.IntegerField()
 

views.py

 def something(request):
    ...
    qs = Person(name="John Doe", age=34, value=10)
    qs.save()
    ...
 

Существует ли аналогичный метод для обновления всех «лиц», если они соответствуют определенному условию?

 ...
qs = Person("UPDATE Person SET value=5 WHERE age < 30") # or something like this
qs.save()
...
 

Спасибо за вашу помощь и советы и отличных выходных всем вам!

Комментарии:

1. Person.objects.filter(age__lt=30).update(value=5)

Ответ №1:

Вы можете использовать .update(…) [Django-doc] для обновления записей соответствующей таблицы и использовать .filter(…) [Django-doc], чтобы указать, какие элементы обновлять.

Таким образом, вы можете фильтровать с помощью:

 Person.objects.filter(age__lt=30).update(value=5) 

Здесь мы используем __lt поиск [Django-doc], чтобы указать, что возраст должен быть меньше 30.