Reputation: 155
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
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
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