Фильтрация объектов на основе двух одинаковых атрибутов
Что касается приведенной ниже модели, как я могу отфильтровать существующие объекты таким образом, чтобы найти только те объекты, в которых "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.