Выборка строк по парам значений двух столбцов в django
У меня есть таблица X
следующего вида:
+----+------------+-------+---------+
| id | product_id | name | deleted |
+----+------------+-------+---------+
| 1 | 1 | "foo" | false |
| 2 | 1 | "bar" | true |
| 3 | 1 | "foo" | true |
| 4 | 2 | "baz" | false |
| 5 | 2 | "baz" | true |
+----+------------+-------+---------+
модель django такова:
class X(models.Model):
id = models.IntegerField()
product_id = models.IntegerField()
name = models.TextField(choices=get_choices())
deleted = models.BooleanField(default=False)
заданы пары продуктов с именами, я хочу пометить их как удаленные.
Я попытался создать список конкатенированных строк типа product_names = ["foo1", baz2"]
и затем аннотировать запросом:
queryset = X.objects.annotate(
product_id_name=Concat("name", "product_id"),
output_field=CharField(),
)
if queryset.exists():
queryset.filter(deleted=False).filter(
product_id_name__in=product_names
).update(deleted=True)
Но я получаю ошибку:
QuerySet.annotate() получил невыражение(я)
Если у вас есть product_id и название, просто используйте простой фильтр.
myid = 2
myname = 'foo'
myquery = X.objects.filter(product_id = myid, name = myname)
for object in myquery:
object.deleted = True
object.save()
Вы можете поместить идентификаторы и имена в список кортежей и выполнить итерацию по ним.