У меня есть модель для наших клиентов и модель для их покупок/заказов. В нашем администраторе бэкенда/сети мы хотим быть в состоянии отсортировать список клиентов по их новому порядку.
Вот в основном, на что похожи наши модели
class Customer(models.Model):
username = models.CharField(max_length=32)
first_name = models.CharField(max_length=322)
def __unicode__(self):
return "%s" % self.username
def get_last_order_date(self):
self.order_set.latest('purchase_date')
class Order(models.Model):
customer = models.ForeignKey(Customer)
purchase_date = models.DateTimeField()
Я могу отобразить новый порядок каждого клиента, использующего мою функцию get_last_order_date, однако я не могу отсортировать по той функции (или по крайней мере я не знаю как). Я попробовал все, о чем я могу думать:
.order_by('order__purchase_date')
.order_by('order__set').latest('purchase_date')
и намного больше без удачи.
Любые подсказки или подсказки очень ценились бы.
Спасибо.
Вы не можете использовать заказ с помощью функции, так как это сделано на уровне базы данных. Вы можете вручную сортировать запрос на запрос. Сортировать (ключ = get_last_order_date)
, но это не будет очень эффективным.
Лучший способ использовать функцию агрегации Django, чтобы получить максимальную дату покупки для клиента и сортировки по этому вопросу:
from django.db.models import Max
Customer.objects.annotate(latest_order=Max('order__purchase_date')).order_by('latest_order')
Вы определенно не можете заказать на заказ Метод (потому что ваша база данных не знает об этом).
Теперь, кажется, трудно делать то, что вы хотите на уровне модели, так что, возможно, переместите его на вид и порядок, используя Python, как это:
sorted(Customer.objects.all(), key=get_last_order_date)