我已经创建了一个基于类别的产品内容过滤的复选框。因此,当用户点击任何复选框时,只显示具有该类别的书籍。在视图中,我传递复选框字段的值(类别名称)从模板中获取但是在过滤时,外键是期望pk(id)而不是字段值。我得到这样的错误,invalid literal for int() with base 10: '<category name>'
。那么是否可以使外键接受值而不是id?< / p>
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)
模板文件,
{% 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)
答案 0 :(得分:1)
您可以查看category
字段本身:
my_products = Add_prod.objects.filter(cat__category__in=filter_category)
查看有关其工作原理的documentation。
以上,仅适用于filter_category
为list
的情况。如果它是一个字符串,你可以过滤如下:
my_products = Add_prod.objects.filter(cat__category=filter_category)
答案 1 :(得分:1)
你可以试试这个,它会对你有帮助:
requestEntries.publish(re -> {
Observable<...> x = re.filter(...<featured>...).map(...).doOnNext(...Log.i(...));
Observable<...> y = re.filter(...<done>...).map(...).doOnNext(...Log.i(...));
return x.mergeWith(y);
})
答案 2 :(得分:1)
您的代码有两个问题
__in
,您认为该类别等于filter_category
中的任何一个字符。因此要修复,请使用字段查找并删除__in
Add_prod.objects.filter(cat__category=filter_category)