Gibt es eine Möglichkeit, diesen Arbeitscode zu vereinfachen? Dieser Code erhält für ein Objekt alle verschiedenen Stimmarten, es sind 20 möglich, und zählt jeden Typ. Ich bevorzuge es, nicht rohe SQL zu schreiben, sondern die ORM. Es ist ein bisschen komplizierter, weil ich generischen Fremdschlüssel im Modell verwende.Karte rohe SQL zu Django Orm
def get_object_votes(self, obj):
"""
Get a dictionary mapping vote to votecount
"""
ctype = ContentType.objects.get_for_model(obj)
cursor = connection.cursor()
cursor.execute("""
SELECT v.vote , COUNT(*)
FROM votes v
WHERE %d = v.object_id AND %d = v.content_type_id
GROUP BY 1
ORDER BY 1 """ % (obj.id, ctype.id)
)
votes = {}
for row in cursor.fetchall():
votes[row[0]] = row[1]
return votes
Die Modelle im
class Vote(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
payload = generic.GenericForeignKey('content_type', 'object_id')
vote = models.IntegerField(choices = possible_votes.items())
class Issue(models.Model):
title = models.CharField(blank=True, max_length=200)
Das Vote-Objekt verwendet einen generierenden Schlüssel, ich möchte über jedes Objekt abstimmen können. Ich werde den Modellcode auch hinzufügen. – Stephan
Ich nehme an, Sie haben ausländische Beziehungen untersucht? Mit ihnen können Sie das gewünschte Objekt direkt erstellen. Das Beispiel sieht möglicherweise wie die Antwort aus. http://www.djangoproject.com/documentation/models/generic_relations/ – AlbertoPL