123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- from django.core.urlresolvers import reverse
- from rest_framework import serializers
- from misago.categories.serializers import BasicCategorySerializer
- from ..models import Thread
- __all__ = [
- 'ThreadSerializer',
- 'ThreadsListSerializer',
- ]
- class ThreadSerializer(serializers.ModelSerializer):
- category = BasicCategorySerializer(many=False, read_only=True)
- acl = serializers.SerializerMethodField()
- is_new = serializers.SerializerMethodField()
- is_read = serializers.SerializerMethodField()
- path = BasicCategorySerializer(many=True, read_only=True)
- subscription = serializers.SerializerMethodField()
- api = serializers.SerializerMethodField()
- url = serializers.SerializerMethodField()
- class Meta:
- model = Thread
- fields = (
- 'id',
- 'category',
- 'title',
- 'replies',
- 'has_unapproved_posts',
- 'started_on',
- 'last_post_on',
- 'last_post',
- 'last_poster_name',
- 'is_unapproved',
- 'is_hidden',
- 'is_closed',
- 'weight',
- 'acl',
- 'is_new',
- 'is_read',
- 'path',
- 'subscription',
- 'api',
- 'url',
- )
- def get_acl(self, obj):
- try:
- return obj.acl
- except AttributeError:
- return {}
- def get_is_new(self, obj):
- try:
- return obj.is_new
- except AttributeError:
- return None
- def get_is_read(self, obj):
- try:
- return obj.is_read
- except AttributeError:
- return None
- def get_top_category(self, obj):
- try:
- return obj.top_category.pk
- except AttributeError:
- return None
- def get_subscription(self, obj):
- try:
- return obj.subscription.send_email
- except AttributeError:
- return None
- def get_api(self, obj):
- return {
- 'index': obj.get_api_url(),
- 'editor': obj.get_editor_api_url(),
- 'merge': obj.get_merge_api_url(),
- 'posts': {
- 'index': obj.get_api_url(),
- 'merge': obj.get_post_merge_api_url(),
- 'move': obj.get_post_move_api_url(),
- 'split': obj.get_post_split_api_url()
- }
- }
- def get_url(self, obj):
- return {
- 'index': obj.get_absolute_url(),
- 'new_post': obj.get_new_post_url(),
- 'last_post': obj.get_last_post_url(),
- 'unapproved_post': obj.get_unapproved_post_url(),
- 'last_poster': self.get_last_poster_url(obj),
- }
- def get_last_poster_url(self, obj):
- if obj.last_poster_id:
- return reverse('misago:user', kwargs={
- 'slug': obj.last_poster_slug,
- 'pk': obj.last_poster_id,
- })
- else:
- return None
- class ThreadsListSerializer(ThreadSerializer):
- category = serializers.PrimaryKeyRelatedField(read_only=True)
- last_post = serializers.PrimaryKeyRelatedField(read_only=True)
- top_category = serializers.SerializerMethodField()
- class Meta:
- model = Thread
- fields = (
- 'id',
- 'category',
- 'title',
- 'replies',
- 'has_unapproved_posts',
- 'started_on',
- 'last_post_on',
- 'last_post',
- 'last_poster_name',
- 'weight',
- 'is_unapproved',
- 'is_hidden',
- 'is_closed',
- 'acl',
- 'is_new',
- 'is_read',
- 'subscription',
- 'top_category',
- 'api',
- 'url',
- )
|