Skip to content

Django toolbar: not showing the results for query with filter with greater than #1081

Open
@sant527

Description

@sant527

I have a simple query in Django. I have Django toolbar installed to check the sql queiries and the corresponding data

My Model:

class RecipePosition(models.Model):
	name = models.CharField(max_length=200,blank=True,help_text="If left blank will be same as Ingredient name Eg: Tomato pulp")
	mass_quantity = models.DecimalField(max_digits=19, decimal_places=10,null=True,blank=True,default=0,validators=[MinValueValidator(0)])
	title = models.CharField(max_length=200,blank=True)
	updated = models.DateTimeField(auto_now=True, auto_now_add=False)
	timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)

I have the below django query with filter.

RecipePosition.objects.all().filter(mass_quantity__gt = 0)

Django gets all the objects whose mass_quantity is greater than 0.

But when i check the sql in the django - toolbar. it shows:

SELECT "recipes_recipeposition"."id", 
       "recipes_recipeposition"."name",
       "recipes_recipeposition"."mass_quantity",
       "recipes_recipeposition"."title", 
       "recipes_recipeposition"."updated", 
       "recipes_recipeposition"."timestamp" 
FROM   "recipes_recipeposition" 
WHERE  "recipes_recipeposition"."mass_quantity" > 'Decimal(''0'')' 
ORDER  BY "recipes_recipeposition"."sequence_number" ASC 

enter image description here

I tried this command in sqlite browser also, but it didnt show any results.

Why django-toolbar is not showing the correct sql.

As per me the sql should be:

SELECT "recipes_recipeposition"."id", 
       "recipes_recipeposition"."name", 
       "recipes_recipeposition"."mass_quantity",
       "recipes_recipeposition"."title", 
       "recipes_recipeposition"."updated", 
       "recipes_recipeposition"."timestamp" 
FROM   "recipes_recipeposition" 
WHERE  "recipes_recipeposition"."mass_quantity" > 0 
ORDER  BY "recipes_recipeposition"."sequence_number" ASC 

and this when tested in slite browser shows the results.

Also When i tested this on shell_plus with --print-sql --ipython shows

$ python manage.py shell_plus --print-sql --ipython
System check identified some issues:

# Shell Plus Model Imports
from recipes.models import Recipe, RecipePosition

Python 3.6.4 (default, Jan  5 2018, 02:35:40) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: RecipePosition.objects.all().filter(mass_quantity__gt=0)
Out[1]: SELECT "recipes_recipeposition"."id",
       "recipes_recipeposition"."name",
       "recipes_recipeposition"."mass_quantity",
       "recipes_recipeposition"."title",
       "recipes_recipeposition"."updated",
       "recipes_recipeposition"."timestamp"
  FROM "recipes_recipeposition"
 WHERE "recipes_recipeposition"."mass_quantity" > '0'
 ORDER BY "recipes_recipeposition"."sequence_number" ASC
 LIMIT 21

Only on django-toolbar it shows Decimal() thing here on Django shell it shows WHERE "recipes_recipeposition"."mass_quantity" > '0'

Also i tried debugsqlshell as mentioned in the django-toolbar documentation. Its shows "recipes_recipeposition"."mass_quantity" > '0' rather than "recipes_recipeposition"."mass_quantity" > 'Decimal(''0'')'

$ python manage.py debugsqlshell                   
Python 3.6.4 (default, Jan  5 2018, 02:35:40) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [2]: from recipes.models import Recipe, RecipePosition

In [3]: RecipePosition.objects.all().filter(mass_quantity__gt = 0)
Out[3]: SELECT "recipes_recipeposition"."id",
       "recipes_recipeposition"."name",
       "recipes_recipeposition"."mass_quantity",
       "recipes_recipeposition"."title",
       "recipes_recipeposition"."updated",
       "recipes_recipeposition"."timestamp"
FROM "recipes_recipeposition"
WHERE "recipes_recipeposition"."mass_quantity" > '0'
ORDER BY "recipes_recipeposition"."sequence_number" ASC
LIMIT 21 [1.58ms]

I dont know why django-toobar is using "recipes_recipeposition"."mass_quantity" > 'Decimal(''0'')' instead of "recipes_recipeposition"."mass_quantity" > '0'

I want to rely on django-toolbar, but now i am worried.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions