Как осуществлять поиск через Enums Django
Я пытаюсь написать функцию поиска для бронирования столика в ресторане, у меня есть модель ресторана:
class Restaurant(models.Model):
"""
Table Restaurant
=======================
This table represents a restaurant with all necessary information.
"""
name = models.CharField(max_length=70)
caterer = models.ForeignKey(Caterer, on_delete=models.CASCADE, null=True)
address = models.OneToOneField(Address, on_delete=models.CASCADE, null=True)
kitchen_type = models.IntegerField(choices=KITCHEN_TYPE, null=True)
opening_hours = models.OneToOneField(OpeningHours, on_delete=models.CASCADE, null=True)
description = models.CharField(max_length=2000, null=True)
phone = models.CharField(max_length=15, null=True)
parking_options = models.BooleanField(default=False)
у которого есть перечисление для типа кухни:
KITCHEN_TYPE = [
(1, "Turkish"),
(2, "Italian"),
(3, "German"),
(4, "English"),
(5, "Indian"),
]
И эта функция поиска в view.py:
def search_result(request):
if request.method == "POST":
searched = request.POST['searched']
result = Restaurant.objects.filter(
Q(name__icontains=searched) | Q(address__city__icontains=searched))
return render(request, 'search_result.html', {'searched': searched, 'result': result})
else:
return render(request, 'search_result.html', {})
Итак, как я могу искать kitchen_type в представлении?
Вместо использования списка кортежей я бы рекомендовал расширить классы IntegerChoices или TextChoices, предоставляемые Django. Вот пример того, как вы можете использовать IntegerChoices:
>>> class KitchenType(models.IntegerChoices):
... TURKISH = 1
... ITALIAN = 2
... GERMAN = 3
...
>>> if 1 in KitchenType:
... print(True)
...
True
https://docs.djangoproject.com/en/4.0/ref/models/fields/#enumeration-types