首页 > 解决方案 > 如何从django中的外键获取数据

问题描述

我正在尝试根据类别 id 获取供应商信息,这意味着当有人选择类别时,应显示针对该类别的所有供应商信息,但是当我调用 url 时,它会显示错误

'不能将 QuerySet 用于“VendorCategory”:对“Vendor”使用 QuerySet '。

如何获取供应商信息

模型.py

class Vendor(models.Model):
     name = models.CharField(max_length=30)
     address = models.CharField(max_length=40)
     Contact_No = models.IntegerField(unique=True)
     email = models.CharField(max_length=30, unique=True)

     def __str__(self):
         return self.name


class VendorCategory(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    vendor = models.ForeignKey(Vendor, on_delete=models.CASCADE)

视图.py

class All_Vendor(TemplateView):
     template_name = 'purchase/allVendor.html'

     def get(self, request, *args, **kwargs):
         categories = categoryModel.objects.all()
         categoryId = self.request.GET.get('SelectCategory')
         vendorselect = VendorCategory.objects.filter(category_id=categoryId)
         vendor_id = VendorCategory.objects.filter(vendor_id=vendorselect)
         vendors = vendorModel.objects.get(id=vendor_id)
         args = {'categories': categories, 'selectedCategory': categoryId, 'vendorselect': vendorselect, 'vendors': vendors}
         return render(request, self.template_name, args)

模板

{% block content%}

    <form method="get">

        <label>
             <select name="SelectCategory">
        <option disabled="disabled" selected> Select Category</option>
            {% for category in categories %}
            <option value={{ category.id }}>
                {{ category.name }}
            </option>
            {% endfor %}
        </select>

        </label>
    <input type="submit" value="Select">
    </form>
    {% for vendor in vendorselect %}
        {{ vendor.id }}

    {% endfor %}

{% endblock %}

标签: pythondjangodjango-views

解决方案


你过滤:

class All_Vendor(TemplateView):
    template_name = 'purchase/allVendor.html'

    def get(self, request, *args, **kwargs):
        categories = categoryModel.objects.all()
        categoryId = self.request.GET.get('SelectCategory')
        vendors = Vendor.objects.filter(
            vendorcategory__category_id=categoryId
        )
        args = {'categories': categories, 'selectedCategory': categoryId, 'vendors': vendors}
        return render(request, self.template_name, args)

vendorselect没有多大意义,因为那是VendorCategorys 的集合,而不是Vendors。


推荐阅读