2016-05-19 6 views
0

カテゴリに基づく商品のコンテンツフィルタリングのチェックボックスを作成しました。ユーザーが任意のチェックボックスをクリックすると、そのカテゴリの書籍のみが表示されます。ビューでは、取得したチェックボックスフィールド(カテゴリ名)の値を渡しています。外部キーはフィールド値の代わりにpk(id)を期待しています。私はinvalid literal for int() with base 10: '<category name>'のようにエラーが発生しています。そのため、外部キーにidの代わりに値を受け入れることは可能ですか?外部キーがdjangoのidの代わりにフィールド値を受け入れる方法?

Models.py、

class Add_cat(models.Model): 
    category = models.CharField("Name",max_length=25,unique=True) 

    def __unicode__(self): 
     return u'{0}'.format(self.category) 

class Add_prod(models.Model): 
    book = models.CharField("Book Name",max_length=40) 
    author = models.CharField("Author",max_length=30) 
    price = models.PositiveIntegerField("Price") 
    image = models.ImageField(upload_to='images',null=True) 
    cat = models.ForeignKey(Add_cat,on_delete=models.PROTECT) 

あなたはcategoryフィールド自体に確認することができますテンプレートファイル、

{% for i in products %} 
       <input type="checkbox" name="cat_name" value="{{i.cat}}">{{i.cat}}<br> 
{% endfor %} 

Views.py、

def welcome_user(request):   
    if 'cat_name' in request.GET: 
     filter_category = request.GET.get('cat_name') 
     my_products = Add_prod.objects.filter(cat__in = filter_category) 
     context = { "products":my_products} 
    else: 
     my_products = Add_prod.objects.all() 
     context = { "products":my_products} 
    return render(request,"welcome-user.html",context) 

答えて

1

my_products = Add_prod.objects.filter(cat__category__in=filter_category) 

documentationをご覧ください。


は、上記、filter_categorylistある場合にのみ適用されます。それはあなたが次のようにフィルタリングすることができ、文字列の場合:

my_products = Add_prod.objects.filter(cat__category=filter_category) 
+0

を削除します? – Bhanukiran

+0

'filter_category'でどのような値が得られているか確認してください。値が正しい場合は、正しい結果が得られます。 – AKS

+0

'__in'は値が配列内にあるかどうかを調べます:) – Sayse

1

あなたはこれを試すことができ、それはあなたを助ける:

Add_prod.objects.filter(cat__category = filter_category) 
1

あなたのコード

  1. と間違って二つのことはあなたがあります。外部キーではなくフィールドを検索する必要があります
  2. __inを使用すると、カテゴリーはのいずれかの文字。したがって

、修正するフィールドのルックアップを使用して、私は空になってきているので、空白output.So uはあなたの答えを更新することができ、このラインクエリセットリストに入ると、デバッグモードで実行した__in

Add_prod.objects.filter(cat__category=filter_category) 
関連する問題