Saya mencoba mengurutkan kumpulan kueri kamus yang saya tambahkan beberapa nilai yang dihitung.

Proses:

class Inventario(models.Model):
    codigo_kinemed = models.CharField(max_length=100)
    existencias = models.IntegerField(help_text="Existencias ", blank=True, null=True)
    valor_coste = models.IntegerField(help_text="Existencias ", blank=True, null=True)
    valor_venta = models.IntegerField(help_text="Existencias ", blank=True, null=True)
    fecha = models.DateField(help_text="Fecha de toma de datos", blank=True, null=True)

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

Saya mendapatkan queryset dari itu.

inventario_diferencia = Inventario.objects.filter(fecha=ultima_fecha_cargada.fecha).values()

Itu mengembalikan queryset dari kamus. Lalu saya mengulangi queryset itu dan menghitung beberapa bidang baru.

for este in inventario_diferencia:
    este['stock_valor_venta'] = este['existencias'] * este['valor_venta']

Saya dapat mencetak bidang terhitung itu tanpa masalah di templat.

{{ inventario_diferencia.stock_valor_venta }}

Memesan

Saya ingin mengurutkan kueri itu menurut nilai stock_valor_ventabaru yang saya tambahkan.

Ketika saya mencoba set kueri yang biasa

inventario_diferencia.order_by('stock_valor_venta')

Saya mendapat:

Tidak dapat menyelesaikan kata kunci 'diferencia_mes' ke dalam bidang. Pilihannya adalah: codigo_kinemed, existencias, fecha, id, valor_coste, valor_venta

Itu adalah nilai asli model, jadi tidak ada opsi untuk memesan berdasarkan nilai baru. Ketika saya mencoba mengurutkannya seperti kamus

inventario_diferencia = sorted(inventario_diferencia, key=lambda t: t.diferencia_mes)

Saya mendapat

objek 'dict' tidak memiliki atribut 'diferencia_mes'

Dokumentasi

Dalam dokumen Django https://docs.djangoproject.com/en /2.1/ref/models/querysets/#values menyatakan sebagai berikut:

values(*fields, **expressions) Returns a QuerySet that returns dictionaries, rather than model instances, when used as an iterable.

Apakah masalah saya terkait dengan bagian "ketika digunakan sebagai iterable" dari pernyataan? Bagaimana saya bisa mengurutkan set kueri semacam itu berdasarkan nilai tambah?

Terima kasih sebelumnya!

0
Francisco Ghelfi 23 Maret 2019, 20:38

1 menjawab

Jawaban Terbaik

Anda harus melihat menggunakan anotasi. Anda bisa membuat bidang yang sama dengan produk dari dua bidang Anda lalu mengurutkannya dalam SQL.

from django.db.models import F
inventario_diferencia = Inventario.objects.filter(
    fecha=ultima_fecha_cargada.fecha
).annotate(
    stock_valor_venta=F('existencias') * F('valor_venta')
).order_by('-stock_valor_venta')

print(inventorio_deiferencia.first().stock_valor_venta)
3
schillingt 23 Maret 2019, 18:08