この作業コードを簡略化する方法はありますか? このコードは、すべての異なる投票タイプのオブジェクトを取得します。可能な限り20あり、それぞれのタイプをカウントします。 私はraw SQLを書くのではなく、ormを使用する方が好きです。このモデルでは汎用の外部キーを使用するため、少し難解です。raw SQLを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
モデルは
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)
投票オブジェクトは、世代別のキーを使用しています。どのオブジェクトでも投票できるようにしたいと思います。私はモデルコードも追加します。 – Stephan
あなたは外国関係を調査したと思いますか?彼らは、あなたが望む特定のオブジェクトを直接作成させることができます。そのような例は、答えを持っているようです。 http://www.djangoproject.com/documentation/models/generic_relations/ – AlbertoPL