class TweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer( read_only=True) # this brings all data from user not only id date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() class Meta: model = Tweet fields = [ 'user', 'content', 'timestamp', 'date_display', 'timesince', ] def get_date_display(self, obj): return obj.timestamp.strftime("%b %d, %Y | at %I:%M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + " ago"
class ChirpModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) #write_only date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() class Meta: model = Chirp fields = [ 'id', 'user', 'content', 'timestamp', 'date_display', 'timesince', ] def get_date_display(self, obj): return obj.timestamp.strftime("%b %d, %Y at %I:%M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + " ago"
class ParentTweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer( read_only=True ) # write_only ---> it is invoke read-only, we don't need to fill in user and details date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() likes = serializers.SerializerMethodField() did_like = serializers.SerializerMethodField() class Meta: model = Tweet fields = [ 'id', 'user', 'content', 'timestamp', 'date_display', 'timesince', 'likes', 'did_like', ] def get_did_like(self, obj): try: user = request.user if user.is_authenticated(): if user in obj.liked.all(): return True except: pass return False def get_likes(self, obj): return obj.liked.all().count() def get_date_display(self, obj): return obj.timestamp.strftime("%b %d, %Y | at %I:%M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + " ago"
class TweetModelSerializer(serializers.ModelSerializer): parent_id = serializers.CharField(write_only=True, required=False) user = UserDisplaySerializer(read_only=True) date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() parent = ParentTweetModelSerializer(read_only=True) likes = serializers.SerializerMethodField() did_like = serializers.SerializerMethodField() class Meta: model = Tweet fields = [ 'id', 'user', 'content', 'timestamp', 'date_display', 'timesince', 'parent', 'likes', 'did_like', 'reply' ] def get_did_like(self, obj): request = self.context.get("request") try: user = request.user if user.is_authenticated(): if user in obj.liked.all(): return True except: pass return False def get_likes(self, obj): return obj.liked.all().count() def get_is_retweet(self, obj): if obj.parent: return True return False def get_date_display(self, obj): return obj.timestamp.strftime("%b %d, %Y at %I:%M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + " ago"
class ParentTweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() likes = serializers.SerializerMethodField() did_like = serializers.SerializerMethodField() class Meta: model = Tweet fields = [ 'id', 'user', 'content', 'timestamp', 'date_display', 'timesince', 'likes', 'did_like', # 'reply', ] def get_did_like(self, obj): request = self.context.get("request") try: user = request.user if user.is_authenticated: if user in obj.liked.all(): return True except BaseException: pass return False def get_likes(self, obj): return obj.liked.all().count() def get_date_display(self, obj): return obj.timestamp.strftime("%b %d, %Y at %I:%M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + " ago..."
class ParentTweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() class Meta: model = Tweet fields = [ "id", "user", "content", "timestamp", "date_display", "timesince", ] def get_date_display(self, obj): return obj.timestamp.strftime("%b %d %Y at %I: %M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + " " + "ago"
class TweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() parent = ParentTweetModelSerializer(read_only=True) likes = serializers.SerializerMethodField() did_like = serializers.SerializerMethodField() class Meta: model = Tweet fields = [ 'id', 'user', 'content', 'timestamp', 'date_display', 'timesince', 'parent', 'likes', 'did_like', 'reply', ] def get_did_like(self, obj): request = self.context.get('request') user = request.user if user.is_authenticated: if user in obj.liked.all(): return True return False def get_likes(self, obj): return obj.liked.all().count() def get_date_display(self, obj): return obj.timestamp.strftime("%d %b, %I:%M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + ' ago'
class ParentTweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() #is_retweet = serializers.SerializerMethodField() class Meta: model = Tweet fields = [ 'id', 'user', 'content', 'timestamp', 'date_display', 'timesince', ] def get_date_display(self, obj): return obj.timestamp.strftime("%b %d, %y at %I:%M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + "ago"
class ParentTweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) #write_only date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() likes = serializers.SerializerMethodField() did_like = serializers.SerializerMethodField() class Meta: model = Tweet fields = [ 'id', 'user', 'content', 'timestamp', 'date_display', 'timesince', 'likes', 'did_like', ] def get_date_display(self, obj): return obj.timestamp.strftime('%b %d, %Y | %I:%M %p') def get_timesince(self, obj): return timesince(obj.timestamp) + ' ago' def get_did_like(self, obj): try: user = request.user if user.is_authenticated(): if user in obj.liked.all(): return True except: pass return False def get_likes(self, obj): return obj.liked.all().count()
class ParentTweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() likes = serializers.SerializerMethodField() did_like = serializers.SerializerMethodField() class Meta: model = Tweet fields = [ "id", "user", "content", "timestamp", "date_display", "timesince", "likes", "did_like", ] def get_did_like(self, obj): request = self.context.get("request") if request: user = request.user if user.is_authenticated(): if user in obj.liked.all(): return True return False def get_likes(self, obj): return obj.liked.all().count() def get_date_display(self, obj): return obj.timestamp.strftime("%d %b %Y, %I:%m %p") def get_timesince(self, obj): return timesince(obj.timestamp) + " ago"
class TweetModelSerializer(serializers.ModelSerializer): # não permite alterar dados do usuário # permite alterar somente o conteúdo user = UserDisplaySerializer( read_only=True) # read_only ou write_only # foreign key date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() class Meta: model = Tweet fields = [ 'user', 'content', 'timestamp', 'date_display', 'timesince', ] # https://docs.python.org/3/library/datetime.html?highlight=strftime#strftime-and-strptime-behavior def get_date_display(self, obj): return obj.timestamp.strftime("%b %d, %I:%M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + " ago"
class FeedModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) class Meta: model = Feed fields = ['user', 'description', 'image']
class PostModelSerializer(serializers.ModelSerializer): parent_id = serializers.CharField(write_only=True, required=False) # user = UserDisplaySerializer() user = UserDisplaySerializer(read_only=True) # write_only date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() # para que desde api y desde web solo se grabe un post sin neesidad de asociarle el parent # pues ser aun post original y no un post para ir anidado a un parent parent = ParentPostModelSerializer(read_only=True) likes = serializers.SerializerMethodField() # **** did_like = serializers.SerializerMethodField() # **** class Meta: model = Post fields = [ 'parent_id', 'id', 'user', 'content', 'timestamp', 'date_display', 'timesince', 'parent', 'likes', # **** 'did_like', # **** # Se responde a un post padre 'reply', ] # read_only_fields = ['reply',] # **** # Se ha cambiado get_did_like por el metodo de abajo # acorde a esta respuesta https://www.udemy.com/tweetme-django/learn/v4/questions/2789020 # Y mas adelante lo arreglan asi: https://www.udemy.com/tweetme-django/learn/v4/t/lecture/6139532?start=0 def get_did_like(self, obj): request = self.context.get("request") try: user = request.user if user.is_authenticated(): if user in obj.liked.all(): return True except: pass return False # **** ''' def get_did_like(self, obj): request = self.context.get("request") user = request if user in obj.liked.all(): return True return False ''' def get_likes(self, obj): # Tomamos el campo liked en el modelo Post y # le hacemos un count para contar los likes return obj.liked.all().count() ''' def get_is_repost(self, obj): # Averiguamos si es un post original o no. Si tiene parent es reposteado # y retornamos True if obj.parent: return True # sino tiene parent retornamos False, y sera un post original return False ''' def get_date_display(self, obj): # https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior # view parameters %b return obj.timestamp.strftime("%b %d, %Y at %I:%M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + " ago"
class ParentPostModelSerializer(serializers.ModelSerializer): # user = UserDisplaySerializer() user = UserDisplaySerializer(read_only=True) # write_only date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() # Para dar like a un post padre o a un repost, se declaran aca tambien # likes y did_like, y tendra ambito sobre ambos, post o repost. likes = serializers.SerializerMethodField() # **** did_like = serializers.SerializerMethodField() # **** class Meta: model = Post fields = [ 'id', 'user', 'content', 'timestamp', 'date_display', 'timesince', 'likes', # **** 'did_like', # **** ] ''' def get_did_like(self, obj): request = self.context.get("request") user = request if user in obj.liked.all(): return True return False ''' def get_did_like(self, obj): request = self.context.get("request") try: user = request.user if user.is_authenticated(): if user in obj.liked.all(): return True except: pass return False def get_likes(self, obj): # Tomamos el campo liked en el modelo Post y # le hacemos un count para contar los likes return obj.liked.all().count() def get_date_display(self, obj): # https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior # view parameters %b return obj.timestamp.strftime("%b %d, %Y at %I:%M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + " ago"
class CrudModelSerializer(serializers.ModelSerializer): user=UserDisplaySerializer() class Meta: model = Crud fields = ('id','user', 'content')
class TweetModelSerializer(serializers.ModelSerializer): parent_id = serializers.CharField(write_only=True, required=False) user = UserDisplaySerializer(read_only=True) #write_only date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() parent = ParentTweetModelSerializer(read_only=True) likes = serializers.SerializerMethodField() did_like = serializers.SerializerMethodField() dp = serializers.SerializerMethodField() # image = serializers.SerializerMethodField() class Meta: model = Tweet fields = [ 'parent_id', 'id', 'user', 'content', # 'image', 'dp', 'timestamp', 'date_display', 'timesince', 'parent', 'likes', 'did_like', 'reply', ] #read_only_fields = ['reply'] # def get_image(self, obj): def get_dp(self, obj): username = obj.user.username if "H3M3N" in username: dp_file = username + '.png' return dp_file if "shubham" in username: dp_file = username + '.png' return dp_file if "indra" in username: dp_file = username + '.png' return dp_file username = username[0] username = username.lower() dp_file = username + '.png' return dp_file def get_did_like(self, obj): request = self.context.get("request") try: user = request.user if user.is_authenticated(): if user in obj.liked.all(): return True except: pass return False def get_likes(self, obj): return obj.liked.all().count() def get_date_display(self, obj): return obj.timestamp.strftime("%b %d, %Y at %I:%M %p") def get_timesince(self, obj): return timesince(obj.timestamp) + " ago"
class TweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer() class Meta: model = Tweet fields = ['user', 'content', 'code']
def get(self, request): serializer = UserDisplaySerializer(request.user) return Response(serializer.data)
class StatisticsInfoModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) total_earnings = serializers.SerializerMethodField() total_num_events = serializers.SerializerMethodField() general_average_earnings = serializers.SerializerMethodField() lottery_average_earnings = serializers.SerializerMethodField() bid_average_earnings = serializers.SerializerMethodField() buyout_average_earnings = serializers.SerializerMethodField() general_join_time = serializers.SerializerMethodField() general_join_event_time = serializers.SerializerMethodField() general_star_time = serializers.SerializerMethodField() general_star_event_time = serializers.SerializerMethodField() class Meta: # the API is built on the party model model = StatisticsInfo # the fields tell us what is in the API. some are Serilaizermethodfields # the others are directly from the model fields = [ 'user', #serialized 'max_profit', 'max_profit_event', 'total_earnings', #serialized 'total_num_events', #serialized 'general_average_earnings', #serialized 'general_join_time', #serialized 'general_join_event_time', #serialized 'general_star_time', #serialized 'general_star_event_time', #serialized 'lottery_num_events', 'lottery_total_earnings', 'lottery_total_participants', 'lottery_average_earnings', #serialized 'lottery_join_time', 'lottery_join_event_time', 'lottery_star_time', 'lottery_star_event_time', 'bid_num_events', 'bid_total_earnings', 'bid_join_time', 'bid_join_event_time', 'bid_star_time', 'bid_star_event_time', 'bid_average_earnings', # serialized 'max_bid_event', 'buyout_num_events', 'buyout_total_earnings', 'buyout_join_time', 'buyout_join_event_time', 'buyout_star_time', 'buyout_star_event_time', 'buyout_average_earnings', # serialized ] def get_general_join_event_time(self, obj): general_join_event = [0] * 48 buyout_join_event = obj.buyout_join_event_time lottery_join_event = obj.lottery_join_event_time bid_join_event = obj.bid_join_event_time for i in range(48): general_join_event[i]= buyout_join_event[i]+lottery_join_event[i]+\ bid_join_event[i] return general_join_event def get_general_join_time(self, obj): general_join = [0] * 48 buyout_join = obj.buyout_join_time lottery_join = obj.lottery_join_time bid_join = obj.bid_join_time for i in range(48): general_join[i]= buyout_join[i]+lottery_join[i]+\ bid_join[i] return general_join def get_general_star_time(self, obj): general_star = [0] * 48 buyout_star = obj.buyout_star_time lottery_star = obj.lottery_star_time bid_star = obj.bid_star_time for i in range(48): general_star[i]= buyout_star[i]+lottery_star[i]+\ bid_star[i] return general_star def get_general_star_event_time(self, obj): general_star_event = [0] * 48 buyout_star_event = obj.buyout_star_event_time lottery_star_event = obj.lottery_star_event_time bid_star_event = obj.bid_star_event_time for i in range(48): general_star_event[i]= buyout_star_event[i]+lottery_star_event[i]+\ bid_star_event[i] return general_star_event def get_buyout_average_earnings(self, obj): num_events = obj.buyout_num_events if num_events == 0: return 0 return obj.buyout_total_earnings / num_events def get_bid_average_earnings(self, obj): num_events = obj.bid_num_events if num_events == 0: return 0 return obj.bid_total_earnings / num_events def get_total_earnings(self, obj): return obj.bid_total_earnings+obj.buyout_total_earnings+\ obj.lottery_total_earnings def get_total_num_events(self, obj): return obj.bid_num_events + obj.buyout_num_events + obj.lottery_num_events def get_general_average_earnings(self, obj): num_events = obj.bid_num_events+obj.buyout_num_events+\ obj.lottery_num_events earnings = obj.bid_total_earnings+obj.buyout_total_earnings+\ obj.lottery_total_earnings if num_events == 0: return 0 average_earnings = earnings / num_events return average_earnings def get_lottery_average_earnings(self, obj): if obj.lottery_num_events == 0: return 0 return obj.lottery_total_earnings / obj.lottery_num_events
class TweetModelSerializer(serializers.ModelSerializer): parent_id = serializers.CharField(write_only=True,required=False) user = UserDisplaySerializer(read_only = True) date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField() likes = serializers.SerializerMethodField() did_like = serializers.SerializerMethodField() # tweetdetail = serializers.SerializerMethodField() parent = ReTweetModelSerializer(read_only = True) comments = serializers.SerializerMethodField() comments_count = serializers.SerializerMethodField() def get_likes(self,obj): return obj.likes.all().count() def get_did_like(self,obj): request = self.context.get("request") user = request.user if user.is_authenticated(): if user in obj.likes.all(): return True return False def get_date_display(self,obj): return obj.timestamp.strftime("%b %d, %Y at %I:%M %p") def get_timesince(self,obj): return timesince(obj.timestamp) def get_comments(self,obj): oct,_ = obj.hell() return oct def get_comments_count(self,obj): _,count = obj.hell() return count class Meta: model = Tweet fields = [ 'parent_id', 'id', 'user', 'content', 'date_display', 'timestamp', 'timesince', 'did_like', 'likes', 'parent', 'reply', 'comments', "comments_count", ]
class TweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) #write_only class Meta: model = Tweet fields = ['user', 'content']
class TaskDisplaySerializer(serializers.ModelSerializer): assigned_to = UserDisplaySerializer(read_only=True) class Meta: model = Task fields = ['assigned_to', 'task', 'description']
class AnswerModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer() class Meta: model = Answer fields = ('__all__')
class ServiceDisplaySerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) class Meta: model = Service fields = ['icon', 'head', 'description', 'user', 'created']
class PartyModelSerializer(serializers.ModelSerializer): # foreign key relationship to the user serializer # would normally display as the id number (from party model), # but serializer allows it to access the data from the user model # the readonly just means that you cant edit a user from an event user = UserDisplaySerializer(read_only=True) # this is a prettier display for the time that converts to AM/PM party_time_display = serializers.SerializerMethodField() # time until the event time timeuntil = serializers.SerializerMethodField() # prettier AM/PM display for time created. currently unused time_created_display = serializers.SerializerMethodField() # tells us if the event time has passed or not #is_open = serializers.SerializerMethodField() # how many people have starred the event stars = serializers.SerializerMethodField() # tells us if the requestuser has starred this one. did_star = serializers.SerializerMethodField() # routes to the thumbnail in the media folder. thumbnail_url = serializers.SerializerMethodField() # this is a shortened version of the title that fits the thumbnail short_title = serializers.SerializerMethodField() # this is a shortened version of the description that fits the thumbnail short_description = serializers.SerializerMethodField() # numberof people that have joined the event joins = serializers.SerializerMethodField() # tells us if the requestuser has joined the event did_join = serializers.SerializerMethodField() # this hold the list of winning users after the event has closed winner_names = serializers.SerializerMethodField() # tells us if requestuser was the one who created this event. is_owner = serializers.SerializerMethodField() num_curr_winners = serializers.SerializerMethodField() verified = serializers.SerializerMethodField() profile_picture = serializers.SerializerMethodField() class Meta: # the API is built on the party model model = Party # the fields tell us what is in the API. some are Serilaizermethodfields # the others are directly from the model fields = [ 'id', 'user', 'title', 'description', 'party_time', 'time_created', 'party_time_display', 'timeuntil', 'time_created_display', 'is_open', 'event_type', 'stars', 'did_star', 'thumbnail_url', 'short_title', 'short_description', 'joins', 'did_join', 'winner_names', 'is_owner', 'cost', 'num_possible_winners', 'num_curr_winners', 'minimum_bid', 'max_entrants', 'verified', 'profile_picture', 'is_twitch_event', ] # method if you want the human readable format of the event type # def get_readable_event_type(self, obj): # return obj.get_event_type_display() # The methods below define the SerializerMethodFields def get_is_owner(self, obj): request = self.context.get('request') try: # actually checks the event user versus the request user = request.user if user.is_authenticated: if user == obj.user: return True except: pass return False # we use winner names because the winner list itself just contains the primary keys def get_winner_names(self, obj): names = [] w = obj.winners.all() for user in w: names.append(user.username) return names # this limits the characters for displaying on the thumbnail def get_short_title(self, obj): return truncatechars(obj.title, 25) def get_short_description(self, obj): return truncatechars(obj.description, 40) def get_thumbnail_url(self, obj): # conn = S3Connection(config('AWS_ACCESS_KEY_ID'), config('AWS_SECRET_ACCESS_KEY')) # bucket = conn.get_bucket(config('S3_BUCKET_NAME')) # k = Key(bucket) # k.key = obj.id # for example, 'images/bob/resized_image1.png' # k.get_contents_from_file() #return "https://s3-us-west-1.amazonaws.com/apogee-assets/thumbnails/2018/07/17/HovaGolfWithFriends.jpg" if obj.thumbnail and hasattr(obj.thumbnail, 'url'): return obj.thumbnail.url else: return None def get_profile_picture(self, obj): if obj.user.profile.profile_picture and hasattr( obj.user.profile.profile_picture, 'url'): return obj.user.profile.profile_picture.url else: return None # requires try block because it may throw an error def get_did_star(self, obj): request = self.context.get('request') try: user = request.user if user.is_authenticated: if user in obj.starred.all(): return True except: pass return False def get_verified(self, obj): return obj.user.profile.is_verified def get_did_join(self, obj): request = self.context.get('request') try: user = request.user if user.is_authenticated: if user in obj.joined.all(): return True except: pass return False def get_stars(self, obj): return obj.starred.all().count() def get_joins(self, obj): return obj.joined.all().count() def get_party_time_display(self, obj): # strftime is python datetime method. the localtime call # converts it back to the local time because it is converted # to UTC when it's stored in the database tz_converted = timezone.localtime(obj.party_time) # the % is just formatting return tz_converted.strftime('%b %d at %I:%M %p') def get_timeuntil(self, obj): return timeuntil(obj.party_time - timedelta(minutes=2)) # this compares the current time to the event time and tells us if it's closed # def get_is_open(self, obj): # return timezone.now()<obj.party_time def get_time_created_display(self, obj): # strftime is python datetime method return obj.time_created.strftime('%b %d at %I:%M %p') def get_num_curr_winners(self, obj): return obj.winners.all().count()
class Meta: model = Clinic_Date_Patients user = UserDisplaySerializer(read_only=True) clinic = Clinic_DateDisplaySerializer(read_only=True) patient = PatientVisitSerializer(read_only=True) fields = ['clinic', 'user', 'patient', 'date']
class TweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer(read_only=True) #write_only date_display = serializers.SerializerMethodField() timesince = serializers.SerializerMethodField()
class TweetModelSerializer(serializers.ModelSerializer): user = UserDisplaySerializer() #this data will be in user class Meta: model = Tweet fields = ['user', 'content']