- edited description
how to sort by property ?
Issue #64
invalid
I have models.py
class Lot(models.Model):
no = models.CharField(max_length=20, db_index=True)
is_delete = models.BooleanField(default=False)
created_user = models.CharField(max_length=32)
updated_user = models.CharField(max_length=32, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.no
@property
def get_number_of_orders(self):
count = LotDetail.objects.filter(lot_id=self.id).count()
return count
class LotDetail(models.Model):
lot = models.ForeignKey(Lot, on_delete=models.PROTECT, related_name='lots')
order = models.ForeignKey(Order, on_delete=models.PROTECT, related_name='orders')
is_delete = models.BooleanField(default=False)
created_user = models.CharField(max_length=32)
updated_user = models.CharField(max_length=32, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return '{0}-{0}'.format(self.lot.no, self.order.no_from_ec)
and views.py
class LotIndex(TemplateView):
template_name = 'tracking/lot/index.html'
class LotDataTable(BaseDatatableView):
model = Lot
columns = ['pk', 'no', 'get_number_of_orders']
order_column = ['no', 'get_number_of_orders']
max_display_length = 20
def get_initial_queryset(self):
return Lot.objects.filter(is_delete=False).all()
when i press sort by get_number_of_orders, 'it raise error no field called "get_number_of_orders".
Thank you :)
Comments (2)
-
reporter -
repo owner - changed status to invalid
Sorting is done on the database level so it is not possible to sort by the result of the method/property defined directly on the model.
In this specific case you can write a query using annotate and Count methods that will add new field to the resultset/database and it should be possible to sort by this new field.
- Log in to comment