[英]Django - filtering on foreign key
我在Django中有一个关于filter的问题。 请帮我。 当我单击l.category_name时,我想显示具有不同类别的产品对象
我的html(CategoryList.html):
{% for l in forms %}
<a href="/myapp/categorylist/{{l.category_id}}"><h2>{{ l.category_name }}</h2></a>
{% endfor %}
CategoryView.html
{{get_product.product_name}}
我的模特:
class Category(models.Model):
category_id = models.AutoField(primary_key = True)
category_name = models.CharField(max_length = 20)
def __unicode__(self):
return self.category_name
class Product(models.Model):
product_id = models.AutoField(primary_key = True)
product_name = models.CharField(max_length = 50)
product_category = models.ForeignKey(Category)
product_color = models.CharField(max_length = 30)
def __unicode__(self):
return self.product_name
我的观点:
def category_list(request):
list = Category.objects.all()
context = {'forms':list}
return render(request,'webpage/CategoryList.html',context)
def category_view(request,category_id):
all = Product.objects.all()
if request.POST:
get_id = Category.objects.get(category_id = request.POST['category_id'])
get_category = Product.objects.get(product_category =
request.POST['product_category'])
get_category.product_category = get_id
get_category.save()
if get_category:
get_product = Product.objects.filter(product_category__category_name =
request.POST['category_name'])
context = {'get_product':get_product}
return render(request,'webpage/CategoryView.html',context)
我在https://docs.djangoproject.com/en/1.6/topics/db/queries/中阅读了文档,但我听不懂。我知道我错了category_view
您的代码似乎有很多问题。
首先,您不必在代码中声明ID。 Django会自动为您执行此操作。 因此, categor_id
和product_id
是不必要的。
其次,删除.POST
检查。 您什么都没张贴。
第三,
get_id = Category.objects.get(category_id = request.POST['category_id']) # returns a category, not an id
get_category = Product.objects.get(product_category =
request.POST['product_category']) # returns the product list, not a category
get_category.product_category = get_id
是相同的
category = Category.objects.get(category_id = request.POST['category_id'])
product_list = Product.objects.get(product_category = category)
第四,不要在模板中对URL进行硬编码。 请改用{% url %}
标签。
最后,您可以将该product_list传递给模板
context = {'product_list':product_list}
return render(request,'webpage/CategoryView.html',context)
外键的存储方式是通过自动字段(ID)。 由于“类别”是“产品”的外来字段,因此当您进行记录条目时,类别的ID存储在产品表的“产品类别”字段中。
我认为您的代码有些混乱,因为您正在尝试执行django为您自动完成的操作。 就像,一旦定义了外键,外键表记录的ID就会自动存储,您不必获取“类别”条目的ID并将其存储在产品表条目中。
您想要实现的目标很简单,可以说您拥有category_name,而没有别的,获取category表条目的id,
category_object = Category.objects.get(category_name = category_name)
category_id = category_object .id
如果您已经具有类别的ID,则可以跳过上述步骤,只需使用ID查询产品表即可获取所需的记录。
Product.objects.filter(product_category = category_id)
在模板中,您可以遍历这些产品记录并显示所需的内容。
顺便说一句,使用.update()方法更新任何字段,而不是save()方法。
像这样:Entry.objects.all()。update(blog = b)
值得您花时间阅读查询帮助。 Django查询
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.