John
John

Reputation: 155

Django: return decimal instead of strange object

I have a model with a decimal field. The output of:

def special_method(self):
    return MyClass.objects.filter(product=self).order_by('-date_active')[0:1]

on this model is:

[<MyClass: 10.00>]

... and I have defined the following method on MyClass:

def __str__(self):
    return str(self.rate)

This may be a silly question but how do I correctly return the decimal number instead of this strange object?

Thanks.

Upvotes: 0

Views: 339

Answers (2)

Daniel Roseman
Daniel Roseman

Reputation: 599788

You're using filter, which always returns a QuerySet - a list-like collection of multiple instances - even if only one item is matched. You should use .get() instead, which will return a single item, and then you can access the .rate property on the returned instance.

Upvotes: 0

Will Hardy
Will Hardy

Reputation: 14846

myclass_instance.rate will give you the decimal number.

[edit]

Your method will then be something like:

def special_method(self):
    return MyClass.objects.filter(product=self).order_by('-date_active')[:1].values_list('rate', flat=True)

Or you might be able to do something like:

def special_method(self):
    return self.myclass_set.order_by('-date_active')[:1].values_list('rate', flat=True)

Upvotes: 1

Related Questions