Friday, October 16, 2020

pages.models.vk_ls_product_search.DoesNotExist: vk_ls_product_search matching query does not exist.

Hi all,

I have written test case for ProductDetails_ls for views

views.py
  ```  
class onClickSearch():

    def ProductDetails_ls(request, id):
        # product_ls = vk_ls_product_search.objects.get(id=id)
        product_ls = get_object_or_404(vk_ls_product_search, id=id)
        email = request.session.get('email')
        return render(request, "productdetails_ls.html", {
'product_ls': product_ls,'msg_count': msg_count_cl(email),
                                                          'time': settings.SESSION_IDLE_TIMEOUT,
                                                          'name': first_last_initial(email),
                                                          'fullname': fullname(email),
                                                          })
```

urls.py

```
 path('ProductDetails_ls/<int:id>', views.onClickSearch.ProductDetails_ls, name='ProductDetails_ls'),
```
test_views.py

```

@pytest.mark.django_db
class TestViews:

    def test_product_detail_ls_authenticated(self):
        mixer.blend('pages.vk_ls_product_search')
        path = reverse('ProductDetails_ls', kwargs={'id': 19})
        request = RequestFactory().get(path)
        request.user = mixer.blend(vk_customer)

        response = onClickSearch.ProductDetails_ls(request, id=19)
        print(response)
        assert response.status_code == 200
```

Here, I am getting this error please anyone can help me out to solve this error,

```
============================================================================= FAILURES =============================================================================
__________________________________________________________ TestViews.test_product_detail_ls_authenticated __________________________________________________________

klass = <class 'pages.models.vk_ls_product_search'>, args = (), kwargs = {'id': 19}, queryset = <QuerySet [<vk_ls_product_search: HmuKHxkrbmhWDylFcBOd>]>

    def get_object_or_404(klass, *args, **kwargs):
        """
        Use get() to return an object, or raise a Http404 exception if the object
        does not exist.

        klass may be a Model, Manager, or QuerySet object. All other passed
        arguments and keyword arguments are used in the get() query.

        Like with QuerySet.get(), MultipleObjectsReturned is raised if more than
        one object is found.
        """
        queryset = _get_queryset(klass)
        if not hasattr(queryset, 'get'):
            klass__name = klass.__name__ if isinstance(klass, type) else klass.__class__.__name__
            raise ValueError(
                "First argument to get_object_or_404() must be a Model, Manager, "
                "or QuerySet, not '%s'." % klass__name
            )
        try:
>           return queryset.get(*args, **kwargs)

c:\users\user\appdata\local\programs\python\python38\lib\site-packages\django\shortcuts.py:76:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <QuerySet [<vk_ls_product_search: HmuKHxkrbmhWDylFcBOd>]>, args = (), kwargs = {'id': 19}, clone = <QuerySet []>, limit = 21, num = 0

    def get(self, *args, **kwargs):
        """
        Perform the query and return a single object matching the given
        keyword arguments.
        """
        clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
        if self.query.can_filter() and not self.query.distinct_fields:
            clone = clone.order_by()
        limit = None
        if not clone.query.select_for_update or connections[clone.db].features.supports_select_for_update_with_limit:
            limit = MAX_GET_RESULTS
            clone.query.set_limits(high=limit)
        num = len(clone)
        if num == 1:
            return clone._result_cache[0]
        if not num:
>           raise self.model.DoesNotExist(
                "%s matching query does not exist." %
                self.model._meta.object_name
            )
E           pages.models.vk_ls_product_search.DoesNotExist: vk_ls_product_search matching query does not exist.

c:\users\user\appdata\local\programs\python\python38\lib\site-packages\django\db\models\query.py:415: DoesNotExist

During handling of the above exception, another exception occurred:

self = <test_views.TestViews object at 0x0000002030703EE0>

    def test_product_detail_ls_authenticated(self):
        mixer.blend('pages.vk_ls_product_search')
        path = reverse('ProductDetails_ls', kwargs={'id': 19})
        request = RequestFactory().get(path)
        request.user = mixer.blend(vk_customer)

>       response = onClickSearch.ProductDetails_ls(request, id=19)

pages\tests\test_views.py:32:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages\views.py:2795: in ProductDetails_ls
    product_ls = get_object_or_404(vk_ls_product_search, id=id)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

klass = <class 'pages.models.vk_ls_product_search'>, args = (), kwargs = {'id': 19}, queryset = <QuerySet [<vk_ls_product_search: HmuKHxkrbmhWDylFcBOd>]>

    def get_object_or_404(klass, *args, **kwargs):
        """
        Use get() to return an object, or raise a Http404 exception if the object
        does not exist.

        klass may be a Model, Manager, or QuerySet object. All other passed
        arguments and keyword arguments are used in the get() query.

        Like with QuerySet.get(), MultipleObjectsReturned is raised if more than
        one object is found.
        """
        queryset = _get_queryset(klass)
        if not hasattr(queryset, 'get'):
            klass__name = klass.__name__ if isinstance(klass, type) else klass.__class__.__name__
            raise ValueError(
                "First argument to get_object_or_404() must be a Model, Manager, "
                "or QuerySet, not '%s'." % klass__name
            )
        try:
            return queryset.get(*args, **kwargs)
        except queryset.model.DoesNotExist:
>           raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)
E           django.http.response.Http404: No vk_ls_product_search matches the given query.

c:\users\user\appdata\local\programs\python\python38\lib\site-packages\django\shortcuts.py:78: Http404

```

But I have that model in my models.py 

models.py

```

class vk_ls_product_search(models.Model):
    # linkid = models.IntegerField(null="true")
    merchantname = models.CharField(max_length=255, null="false")
    product_name = models.CharField(max_length=255)
    sku = models.CharField(max_length=300, null="false")
    img_url = models.TextField(max_length=255, null="false")
    description_short = models.TextField(max_length=255, null=True)
    description_long = models.TextField(max_length=255, null=True)
    price = models.DecimalField(max_digits=10, decimal_places=2, null="false", default=0)
    sale_price = models.DecimalField(max_digits=10, decimal_places=2, null="false", default=0)
    category_primary = models.CharField(max_length=255, null="false")
    category_secondary = models.CharField(max_length=255, null="false")
    createdon = models.DateTimeField(editable=False, null=True)
    link_url = models.TextField(max_length=500, null=True)
    upc_code = models.BigIntegerField(null=True)
    rebate = models.BigIntegerField(null="false", default=0)
    type_of_product = models.CharField(max_length=50, null=True, default="lsps")
    webservice_id = models.IntegerField(null=True)

    """ Here, it saves time as your timezone  """

    def save(self, *args, **kwargs):
        """ On save, update timestamps """
        if not self.pk:
            self.createdon = timezone.now()
        return super(vk_ls_product_search, self).save(*args, **kwargs)

    def __str__(self):
        return self.product_name

    class Meta:
        verbose_name_plural = 'vk_ls_product_search'

```

Please, Help me out to solve this error.

Thank you
~Salima

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAMSz6bmKt%3DuhEwWD4EZZ9PFENH%2BT80H3Grjt5OTyFaSd670zsA%40mail.gmail.com.

No comments:

Post a Comment