Fix feed serializer and view

This commit is contained in:
Jan Tuomi
2019-03-13 13:53:06 +02:00
parent e4577e13e0
commit 11c92cdd5f
2 changed files with 25 additions and 22 deletions
+8 -10
View File
@@ -73,24 +73,22 @@ class TagSerializer(serializers.ModelSerializer):
class FeedSerializer(serializers.ModelSerializer): class FeedSerializer(serializers.ModelSerializer):
# tags = TagSerializer(many=True, read_only=False) tag_id = serializers.PrimaryKeyRelatedField(
# tags = serializers.PrimaryKeyRelatedField( many=True,
# many=True, source="tags",
# queryset=Tag.objects.all(), queryset=Tag.objects.all()
# read_only=False )
# )
class Meta: class Meta:
model = Feed model = Feed
fields = ('tags', 'visible', 'title', 'description', fields = ('id', 'tags', 'tag_id', 'visible', 'title', 'description',
'content', 'publish_time', 'autohide') 'content', 'publish_time', 'autohide', 'autohide_enabled')
depth = 1
def create(self, validated_data): def create(self, validated_data):
print("validated data: ", validated_data)
tags_data = validated_data.pop('tags') tags_data = validated_data.pop('tags')
feed = Feed.objects.create(**validated_data) feed = Feed.objects.create(**validated_data)
for tag in tags_data: for tag in tags_data:
print(tag)
feed.tags.add(tag) feed.tags.add(tag)
feed.save() feed.save()
return feed return feed
+17 -12
View File
@@ -33,15 +33,6 @@ class IsPostOrIsAuthenticated(permissions.BasePermission):
return True return True
return request.user and request.user.is_authenticated return request.user and request.user.is_authenticated
class IsPostOrReadOnlyOrAuthenticated(permissions.BasePermission):
def has_permission(self, request, view):
if request.method in ['POST', 'GET']:
return True
return request.user and request.user.is_authenticated
# -- REST API -- # # -- REST API -- #
class RootView(routers.APIRootView): class RootView(routers.APIRootView):
permission_classes = [IsAuthenticatedOrReadOnly] permission_classes = [IsAuthenticatedOrReadOnly]
@@ -50,13 +41,17 @@ class RootView(routers.APIRootView):
class EventViewSet(viewsets.ModelViewSet): class EventViewSet(viewsets.ModelViewSet):
queryset = Event.objects.all() queryset = Event.objects.all()
serializer_class = EventSerializer serializer_class = EventSerializer
permission_classes = [IsPostOrReadOnlyOrAuthenticated] permission_classes = [IsAuthenticatedOrReadOnly]
filter_backends = (filters.DjangoFilterBackend, SearchFilter, OrderingFilter) filter_backends = (filters.DjangoFilterBackend, SearchFilter, OrderingFilter)
filter_fields = '__all__' filter_fields = '__all__'
search_fields = '__all__' search_fields = '__all__'
def get_queryset(self): def get_queryset(self):
return Event.objects.filter(visible=True, end_time__gt=timezone.now()).order_by('start_time') since = self.request.query_params.get('since', None)
if since:
return Event.objects.filter(visible=True, end_time__gt=since).order_by('start_time')
return Event.objects.filter(visible=True).order_by('start_time')
class SignupFormViewSet(viewsets.ModelViewSet): class SignupFormViewSet(viewsets.ModelViewSet):
@@ -98,7 +93,17 @@ class FeedViewSet(viewsets.ModelViewSet):
search_fields = '__all__' search_fields = '__all__'
def get_queryset(self): def get_queryset(self):
return Feed.objects.filter(visible=True, autohide__gt=timezone.now()).order_by('publish_time') objs = Feed.objects.filter(visible=True).order_by('publish_time')
result_ids = []
for obj in objs:
if obj.autohide_enabled:
if obj.autohide > timezone.now():
result_ids.append(obj.id)
else:
result_ids.append(obj.id)
return Feed.objects.filter(id__in=result_ids)
class ContactsViewSet(viewsets.ReadOnlyModelViewSet): class ContactsViewSet(viewsets.ReadOnlyModelViewSet):