Фильтрация объектов на основе двух одинаковых атрибутов

Что касается приведенной ниже модели, как я могу отфильтровать существующие объекты таким образом, чтобы найти только те объекты, в которых "Name" содержит определенное слово, например, "Green", но также и те, в которых продавец объекта может содержать "Green"? Я, конечно, имею в виду значение (предполагая тот же тип, хотя в данном примере я использую char и текстовое поле).

class Hat(models.Model):
    Name = models.CharField(max_length=255, unique = False)
    Size = models.IntegerField(choices=list(zip(range(1, 11), range(1, 11))), unique=False)
    Vendor = models.TextField(max_length=255, unique = False)
 
List = [for Hat in Hat.objects.filter(Name__contain="Green")]
 

Вы можете .filter(…) [Django-doc] с:

from django.db.models import Q

Hat.objects.filter(Name__contains='Green', Vendor__contains='Green', _connector=Q.OR)

Примечание: обычно имена полей в модели Django записываются в snake_case, а не PascalCase, поэтому должно быть: vendor вместо Vendor.


Note: For case-insensitive matches, you can use the __icontains lookup [Django-doc]. Case insitive matching is not equivalent to converting the two operands to lowercase: case insensitive matching is more sophisticated since some characters have no uppercase or lowercase variant, and there are certain rules when two characters are considered the same in an case-insenstive manner.

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