Je suis en train d'écrire cette requête SQL brute,Réécrire SQL brute comme Django requête
info_model = list(InfoModel.objects.raw('SELECT *,
max(date),
count(postid) AS freq,
count(DISTINCT author) AS contributors FROM
crudapp_infomodel GROUP BY topicid ORDER BY date DESC'))
comme une requête de django. La tentative suivante ne fonctionne pas car je ne peux pas obtenir les champs associés pour 'author' et 'post'.
info_model = InfoModel.objects.values('topic')
.annotate(max=Max('date'),
freq=Count('postid'),
contributors=Count('author',
distinct=True))
.order_by('-max')
Avec SQL brute je peux utiliser SELECT * mais comment puis-je faire l'équivalent avec la requête Django?
Le modèle est,
class InfoModel(models.Model):
topicid = models.IntegerField(default=0)
postid = models.IntegerField(default=0)
author = models.CharField(max_length=30)
post = models.CharField(max_length=30)
date = models.DateTimeField('date published')
Je ne posterai déjà ce problème ici Django Using order_by with .annotate() and getting related field
Je suppose que vous utilisez MySQL puisque votre requête brute ne fonctionnera pas sur PostGres. La raison en est que vous commandez avec un champ qui n'est pas le groupe par. Votre requête brute est étrange, s'il vous plaît fournir une entrée et une sortie attendue –
Ok, je vois ce que vous voulez dire, donc je dois utiliser .order_by ('- max'). Cela ordonne les données correctement. Vous pouvez réellement voir les données d'origine si vous suivez le lien au bas de la publication. –
J'utilise sqlite. –