Tengo una página con muchos objetos con diferentes tipos de contenido. Necesito tener la capacidad de calificar estos objetos. Aquí es una clase para la que:Django obtener ContentType en una plantilla
class Score(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
for_object = generic.GenericForeignKey('content_type', 'object_id')
like = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)
comment = models.CharField(max_length=255, blank=True, null=True)
objects = ChainerManager(ScoreQuerySet)
def __unicode__(self):
return u'Score for (%s, #%s) from user %s at %s' %\
(self.content_type, self.object_id, self.user.get_full_name(), self.created_at)
class Meta:
unique_together = (('user', 'content_type', 'object_id'),)
Y mi plantilla debe verse como:
...
{% for random_object in random_object_queryset %}
<a href={% url like_object random_object.<content_type> random_object.id %}>{{ random_object.name }}</a>
<a href={% url dislike_object random_object.<content_type> random_object.id %}>{{ random_object.name }}</a>
{% endfor %}
...
puedo hacer etiqueta de plantilla para conseguirlo, o conseguir un nombre de clase, utilizando por ejemplo este fragmento: http://djangosnippets.org/snippets/294/ I puede reescribir este snuppet para obtener el content_type_id para el objeto, pero me temo un poco acerca de la gran cantidad de búsquedas CT en DB.
¿Pero hay algún método integrado para obtener el CT del objeto en una plantilla?
El código de la vista:
def rate_object(request, classname, object_id, like=True):
user = request.user
Klass = ContentType.objects.get(model=classname).model_class()
obj = get_object_or_404(Klass, user=user, pk=object_id)
try:
score = Score.objects.for_object(user, obj)
score.like = like
score.save()
except Score.DoesNotExist:
score = Score.objects.like(user, obj) if like else Score.objects.dislike(user, obj)
return HttpResponse(obj)
¿Puedes poner el código de tu vista? –
Solo para información: No debe agregar tantos espacios después de sus variables. No es PEP8 (http://www.python.org/dev/peps/pep-0008/#whitespace-in-expressions-and-statements) – Thomas