Выборка строк по парам значений двух столбцов в 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()

Вы можете поместить идентификаторы и имена в список кортежей и выполнить итерацию по ним.

Вернуться на верх