Mam stronę z dużą ilością obiektów o różnych typach zawartości. Potrzebuję umiejętności oceniania tych obiektów. Tutaj jest klasą dla niego:Django pobierz ContentType do szablonu
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'),)
A mój szablon powinien wyglądać następująco:
...
{% 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 %}
...
mogę zrobić szablon, aby go lub dostać classname korzystając czyli tym fragmencie: http://djangosnippets.org/snippets/294/ I mogę przepisać ten snuppet, aby uzyskać content_type_id dla obiektu, ale obawiam się trochę o dużej liczbie wyszukiwań CT w DB.
Ale czy jest jakiś wbudowany sposób na pobranie CT obiektu w szablonie?
Kod widok:
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)
Czy możesz umieścić swój kod widzenia? –
Dla informacji: Nie powinieneś dodawać tyle spacji po zmiennych. To nie jest PEP8 (http://www.python.org/dev/peps/pep-0008/#whitespace-in-expressions-and-statements) – Thomas