Davor_Python
Davor_Python

Reputation: 25

<Field 'id' expected a number but got 'Vodoinstalater'.> have to fix this?

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

Answers (1)

Vineet Yadav
Vineet Yadav

Reputation: 304

Try this:

posts = posts.filter(task_category__category_title=category)

Upvotes: 1

Related Questions