Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- INPUT - request
- {
- "task_id": "1",
- "dates": ["2018-01-02"],
- "hours_from": "15:00",
- "hours_to": "12:00"
- }
- MODELS
- class Day(models.Model):
- user = models.ForeignKey('auth.User',
- on_delete=models.PROTECT,
- related_name='created_events')
- date = models.DateField(default=timezone.now)
- creation_date = models.DateTimeField(default=timezone.now)
- class Event(Day):
- task = models.ForeignKey(Task,
- on_delete=models.PROTECT,
- related_name='related_events')
- hour_from = models.TimeField(default=timezone.now)
- hour_to = models.TimeField(default=timezone.now)
- task_name = models.CharField(max_length=64, null=True, blank=True)
- SERIALIZER
- class EventSerializer(serializers.ModelSerializer):
- hour_from = serializers.TimeField()
- hour_to = serializers.TimeField()
- def validate(self, data):
- """
- Check that the start is before the stop.
- """
- if data['hour_from'] > data['hour_to']:
- raise serializers.ValidationError("finish must occur after start")
- return data
- class Meta:
- model = Event
- fields = ('task_id', 'task_name', 'date', 'hour_from', 'hour_to', 'user')
- VIEWS
- class EventViewSet(LoggingMixin, viewsets.ModelViewSet):
- queryset = Event.objects.all()
- serializer_class = EventSerializer
- def get_queryset(self):
- user = self.request.user
- events_by_user = Event.objects.filter(user=user)
- today = datetime.date.today()
- data = events_by_user.filter(date__year=today.year,
- date__month=today.month)
- return data
- def create(self, request):
- time_from = request.data.__getitem__('hours_from')
- hours_from = datetime.datetime.strptime(time_from, '%H:%M').time()
- time_to = request.data.__getitem__('hours_to')
- hours_to = datetime.datetime.strptime(time_to, '%H:%M').time()
- user = request.user
- dates = request.data['dates']
- task_pk = int(request.data.__getitem__('task_id'))
- task = Task.objects.filter(pk=task_pk)[0]
- task_name = Task.objects.filter(pk=task_pk).get()
- created_events = []
- for i in dates:
- date = datetime.datetime.strptime(i, "%Y-%m-%d").date()
- event = Event.objects.create(
- user=user,
- task=task,
- date=date,
- hour_from=hours_from,
- hour_to=hours_to,
- task_name=task_name
- )
- created_events.append(event)
- events = EventSerializer(created_events, many=True).data
- return Response(events, status=status.HTTP_201_CREATED)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement