sql >> Databáze >  >> RDS >> Mysql

Django manytomany dotaz podivné chování

Od Subscription je průchozí tabulka pro vztah m2m mezi Post a Subscriber , když objednáváte v poli Subscription samotný model, všechny příspěvky se zobrazí jako jednotlivé řádky v sadě výsledků, a proto získáte s_count=1 protože každý příspěvek s konkrétním odběratelem je jedinečný.

Musíte anotovat Post objekty s nejnovějším date_subscribed všech subscribers a poté objednejte v anotovaném poli:

posts = Post.objects.annotate(
            s_count=Count('subscribers'),
            s_date_max=Max('subscription__date_subscribed')
        ).order_by('-s_count', '-s_date_max')

AKTUALIZACE další otázky:

Pokud použijete count() metoda vrátí počet Posts . Můžete vidět, že se bude lišit od počtu, který získáte z len(queryset.values_list('s_count', 'subscription__date_subscribed')) protože v tomto okamžiku byly jednotlivé hodnoty pro data načteny v sadě výsledků.




  1. Proč je přístup k poli PostgreSQL mnohem rychlejší v C než v PL/pgSQL?

  2. Aliasing názvů polí v modelu SQLAlchemy nebo podkladové tabulce SQL

  3. Jaký je nejjednodušší způsob importu nové tabulky do MySQL v5 z CSV?

  4. Co je SQL?