SORU
30 Ocak 2010, CUMARTESİ


Hiçbir veritabanı alanına özel list_display alanlardan birine göre sıralama Django admin:

# admin.py
class CustomerAdmin(admin.ModelAdmin):  
    list_display = ('foo', 'number_of_orders')

# models.py
class Order(models.Model):
    bar = models.CharField[...]
    customer = models.ForeignKey(Customer)

class Customer(models.Model):
    foo = models.CharField[...]
    def number_of_orders(self):
        return u'%s' % Order.objects.filter(customer=self).count()  

Nasıl Müşteriler, number_of_orders göre bir şeyler alabilir miyim?

admin_order_field veritabanı özelliği bir alanı sıralamak için gerektirir olarak burada kullanılabilir. Django alttaki DB sıralama yapmak için kullanır mümkün olduğunca hiç? Sipariş numarası içeren bir toplama alanı oluşturmak bir overkill gibi görünüyor.

Eğer url bu sütun üzerinde sıralamak için tarayıcıda el ile değiştirirseniz - beklendiği gibi çalışıyor! eğlenceli şey:

CEVAP
16 EYLÜL 2011, Cuma


Bu sorun için çözüm Greg'in sevdim ama aynı şeyi doğrudan admin yapabileceğiniz işaret etmek istiyorum:

from django.db import models

class CustomerAdmin(admin.ModelAdmin):
    list_display = ('number_of_orders',)

    def queryset(self, request):
        qs = super(CustomerAdmin, self).queryset(request)
        qs = qs.annotate(models.Count('order'))
        return qs

    def number_of_orders(self, obj):
        return obj.order__count
    number_of_orders.admin_order_field = 'order__count'

Bu şekilde, yalnızca yönetici arayüzü içinde açıklama. Yaptığınız her Sorgu ile değil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elefant Traks

    Elefant Trak

    5 HAZİRAN 2007
  • REK Roth Productions

    REK Roth Pro

    8 Ocak 2011
  • Within Temptation

    Within Tempt

    18 EYLÜL 2006