Reputation: 25
I am traying to filter data by using and in Django. But always getting an error <Field 'id' expected a number but got 'Vodoinstalater'.>
Here is the main models.py file:
from django.db import models
class TaskCategory(models.Model):
category_title = models.CharField(max_length=50)
def __str__(self):
return self.category_title
class Post(models.Model):
task_title = models.CharField(max_length=250)
task_discription = models.CharField(max_length=250)
task_category = models.ForeignKey(TaskCategory, on_delete=models.CASCADE)
recommended_tools = models.CharField(max_length=250)
budget = models.CharField(max_length=250)
def __str__(self):
return self.task_title + ' | ' + self.task_discription + ' | ' + str(self.task_category) + ' | ' + self.recommended_tools + ' | ' + self.budget
views.py file:
from .models import Post, TaskCategory
from django.shortcuts import render, get_object_or_404
def is_valid_queryparam(param):
return param != '' and param is not None
def PostPageView(request):
posts = Post.objects.all()
category = TaskCategory.objects.all()
context = {
'posts': posts,
'category': category,
}
category = request.GET.get('category')
if is_valid_queryparam(category) and category != 'Choose...':
posts = posts.filter(task_category=category)
category = TaskCategory.objects.all()
context = {
'posts': posts,
'category': category,
}
return render(request, "post_page.html", context)
return render(request, "post_page.html", context)
urls.py file:
from django.urls import path
from .views import PostPageView
urlpatterns = [
path('PostPage/', PostPageView, name ='post_page'),
]
And HTML file:
{% for cat in category %}
<option value="{{ cat.category_title }}">{{ cat.category_title }}</option>
{% endfor %}
Upvotes: 0
Views: 31
Reputation: 304
Try this:
posts = posts.filter(task_category__category_title=category)
Upvotes: 1