smith
smith

Reputation: 373

How can get the data from the foreign key in django

I am trying to get the vendor information against the category id,means when someone select the category all vendor's information against the category should be display,but when i call the url it show the error

' Cannot use QuerySet for "VendorCategory": Use a QuerySet for "Vendor" '.

how can i get the vendor information

Model.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)

View.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)

Template

{% 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 %}

Upvotes: 1

Views: 205

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476584

You filter with:

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 makes not much sense, since that is a collection of VendorCategorys, not Vendors.

Upvotes: 1

Related Questions