Ich verwende Django 1.8.wie die Ausgabe von Count() in Django auf FloatField in Django 1.8
Ich habe zwei Modelle: -
class Query(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
title = models.TextField()
details = models.TextField()
pub_date = models.DateTimeField('date published')
post_score=models.FloatField(default=0.0)
....
class Tags(models.Model):
"""docstring for Tags"""
tagname=models.TextField()
grouppostlist=models.ManyToManyField(Query,through='GroupPostsTag',through_fields=('tag','query'))
# and another model(it stores tags for a query)
class GroupPostsTag(models.Model):
query=models.ForeignKey('Query')
tag=models.models.ForeignKey('Tags')
Jetzt möchte ich Anfragen sortieren, basierend auf der Summe aus „Anzahl von Tags“ und Abfrage „post_score“. Ich suche etwas wie folgt aus: -
tagged_user_posts = Query.objects.filter(Q(tags__id__in=tags_list)).annotate(num_tags=Cast(Count('tags'),models.FloatField())).annotate(post_scores=F('num_tags')+F('post_score')).order_by('-post_scores')
Cast in django 1.10 vorgesehen ist. Also welche Alternative kann ich verwenden?
Es ist Open Source. Sie können einfach die [Quelle der 'Cast' Klasse] (https://docs.djangoproject.com/en/1.10/_modules/django/db/models/functions/base/#Cast) kopieren und in einer Datei speichern dein Projekt. – xyres
Ich versuchte das, aber es gab mir einen Fehler: 'TypeError: as_sql() hat ein unerwartetes Schlüsselwortargument 'db_type'' – badiya
Ich habe den Quellcode ein wenig geändert und fügte es in einer Antwort hinzu. Ich hoffe, das hilft. – xyres