カテゴリに基づく商品のコンテンツフィルタリングのチェックボックスを作成しました。ユーザーが任意のチェックボックスをクリックすると、そのカテゴリの書籍のみが表示されます。ビューでは、取得したチェックボックスフィールド(カテゴリ名)の値を渡しています。外部キーはフィールド値の代わりに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)
を削除します? – Bhanukiran
'filter_category'でどのような値が得られているか確認してください。値が正しい場合は、正しい結果が得られます。 – AKS
'__in'は値が配列内にあるかどうかを調べます:) – Sayse