Pertanyaan Django untuk Baris dengan Nilai Medan Pendua
Andaikan kita mempunyai model Django dengan medan bukan unik. Kita perlu memilih semua baris daripada model yang mempunyai sekurang-kurangnya satu nilai pendua untuk medan itu.
Pendekatan SQL Biasa
Satu penyelesaian yang mungkin adalah menggunakan SQL biasa:
SELECT * FROM literal WHERE name IN ( SELECT name FROM literal GROUP BY name HAVING COUNT(*) > 1 );
Django ORM Pendekatan
Menggunakan ORM Django, kita boleh mencapai hasil yang sama dengan gabungan nilai(), anotasi(), order_by(), dan penapis():
from django.db.models import Count dupes = Literal.objects.values('name') \ .annotate(Count('id')) \ .order_by() \ .filter(id__count__gt=1)
Memandangkan kod di atas mengembalikan ValuesQuerySet, kita perlu menukarnya kepada QuerySet biasa untuk menggunakannya sebagai penapis:
duplicates = Literal.objects.filter(name__in=[item['name'] for item in dupes])
Pendekatan ini memastikan bahawa kami hanya memilih baris dengan nilai nama pendua.
Atas ialah kandungan terperinci Bagaimana untuk Mencari Baris dengan Nilai Medan Pendua Menggunakan Django ORM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!