Это фрагмент шаблона, обрабатывающего поиск:
Код: Выделить всё
Select a category
{% for category_key, category_name in service_categories %}
{{ category_name }}
{% endfor %}
Search
Код: Выделить всё
def search(request):
# Capture search criteria from request parameters
category = request.GET.get('category')
start_time = request.GET.get('start_time')
end_time = request.GET.get('end_time')
# Initialize search results
search_results = None
if category or (start_time and end_time):
# Filter providers based on category and availability
query = ServiceProvider.objects.all()
if category:
query = query.filter(services__category=category)
if start_time and end_time:
try:
start_time = datetime.strptime(start_time, '%Y-%m-%dT%H:%M:%S')
end_time = datetime.strptime(end_time, '%Y-%m-%dT%H:%M:%S')
query = query.filter(
availabilities__start_time__lte=end_time,
availabilities__end_time__gte=start_time
)
except Exception as e:
print(f"Error processing availability: {e}")
search_results = query.distinct()
# Fetch Popular or Featured Providers (modify based on your logic)
popular_providers = ServiceProvider.objects.filter(is_featured=True)[:3]
service_categories = Service.service_categories
context = {
'search_results': search_results,
'popular_providers': popular_providers,
'service_categories': service_categories
}
return render(request, 'search.html', context)
Код: Выделить всё
class ServiceProvider(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='service_provider')
location = models.CharField(max_length=255)
average_rating = models.FloatField(default=0.0, validators=[MinValueValidator(0.0), MaxValueValidator(5.0)])
name = models.CharField(max_length=255, default='Provider name')
image_url = models.URLField(blank=True) # Optional field for service provider image URL
description = models.TextField(blank=True) # Optional field for service provider description
offers = models.TextField(blank=True) # Field to store offered services (comma-separated or JSON format)
pricing = models.TextField(blank=True) # Field to store pricing information (text or JSON format)
availability_description = models.TextField(blank=True) # Text field for general availability info (e.g., "Weekdays 9am-5pm")
is_featured = models.BooleanField(default=False)
def __str__(self):
return self.user.username
Код: Выделить всё
class Service(models.Model):
service_categories = [
('Dance', 'Dance'),
('Music', 'Music'),
('MC', 'Master of Ceremonies'),
# Add more categories as needed
]
name = models.CharField(max_length=255)
provider = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='services')
location = models.CharField(max_length=255, default='')
description = models.TextField()
price = models.DecimalField(max_digits=10, decimal_places=2)
category = models.CharField(max_length=50, choices=service_categories)
def __str__(self):
return f"{self.name} by {self.provider.user.username}"
Я ожидал, что код вернет список поставщиков услуг в определенной категории, например, «Танцы», но вместо этого возникла эта ошибка:
Невозможно преобразовать ключевое слово «услуги» в поле. Возможные варианты: доступность, доступность_описание, средний_рейтинг, описание, идентификатор, image_url, is_featured, местоположение, имя, предложения, цена, пользователь, user_id
Я чувствую, что проблема может возникнуть. это что-то маленькое, но лично мне это не удалось понять.
PS: Извините, если я предоставил много ненужного кода, я впервые публикую здесь вопрос. Кроме того, если потребуются дополнительные объяснения, я могу их предоставить.
Подробнее здесь: https://stackoverflow.com/questions/786 ... d-in-djang