Here are my codes
models.py
class Event(models.Model): title = models.CharField(max_length=255, default=None, unique=True) link = models.URLField(default=None, null=True) description = models.TextField() def __str__(self): return self.title class Meta: db_table = 'events' class EventGroup(models.Model): event = models.ForeignKey(Event, related_name='events', on_delete=models.CASCADE) event_date = models.DateField() class Meta: db_table = 'event_group'
views.py
class EventGroupData(ListAPIView): queryset = EventGroup.objects.all() serializer_class = EventGroupSerializer def get_queryset(self): queryset = self.queryset return queryset.objects.filter(data=id).order_by('-event_date')
Serializer.py
import datetime class EventGroupSerializer(serializers.ModelSerializer): event_date = serializers.SerializerMethodField(method_name='get_date') class Meta: model = EventGroup fields = '__all__' def get_date(self, instance): event_date = datetime.datetime.now() return event_date.strftime("%m/%d/%Y")
can you please tell me why same month showing twice with same data? models.py
class Event(models.Model): title = models.CharField(max_length=255, default=None, unique=True) link = models.URLField(default=None, null=True) description = models.TextField() date = models.DateField(default=None, null=True) is_published = models.BooleanField(default=False) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) def __str__(self): return self.title class Meta: db_table = 'events' verbose_name = 'event' verbose_name_plural = 'events' class EventGroup(models.Model): event = models.ForeignKey(Event, related_name='events', on_delete=models.CASCADE) date = models.DateField() created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) class Meta: db_table = 'event_group'
serializer.py
class EventGroupSerializer(serializers.ModelSerializer): events = serializers.SerializerMethodField(method_name='get_events') month_year = serializers.SerializerMethodField(method_name='get_month_year') total = serializers.SerializerMethodField(method_name='get_count_events') class Meta: model = EventGroup fields = ('month_year', 'total', 'events',) def get_count_events(self, instance): org_date = str(instance['date']) date = datetime.datetime.strptime(org_date, "%Y-%m-%d") month = date.month year = date.year count = Event.objects.filter(date__month=month, date__year=year).count() return count def get_month_year(self, instance): org_date = str(instance['date']) date = datetime.datetime.strptime(org_date, "%Y-%m-%d").date() month_year = str(date.month)+'-'+str(date.year) return str(month_year) def get_events(self, instance): org_date = str(instance['date']) date = datetime.datetime.strptime(org_date, "%Y-%m-%d") month = date.month year = date.year events = Event.objects.filter(date__month=month, date__year=year) event_serializer = EventSerializer(events, many=True) return event_serializer.data
class EventGroupData(ListAPIView): queryset = EventGroup.objects.all() serializer_class = EventGroupSerializer def get_queryset(self): queryset = self.queryset return queryset.annotate(month=TruncMonth('date')).values('date').annotate(c=Count('id')).order_by()
results
{ "count": 4, "next": null, "previous": null, "results": [ { "month_year": "6-2019", "events": [ { "id": 30, "title": "Event 2", "description": "Event 2", "date": "2019-06-02" }, { "id": 31, "title": "Event 3", "description": "Event 3", "date": "2019-06-04" } ] }, { "month_year": "6-2019", "events": [ { "id": 30, "title": "Event 2", "description": "Event 2", "date": "2019-06-02" }, { "id": 31, "title": "Event 3", "description": "Event 3", "date": "2019-06-04" } ] }, { "month_year": "9-2019", "events": [ { "id": 32, "title": "Event 4", "description": "Event 4", "date": "2019-09-04" }, { "id": 29, "title": "Event 1", "description": "Event 1", "date": "2019-09-25" } ] }, { "month_year": "9-2019", "events": [ { "id": 32, "title": "Event 4", "description": "Event 4", "date": "2019-09-04" }, { "id": 29, "title": "Event 1", "description": "Event 1", "date": "2019-09-25" } ] } ] }
it should be like this
{ "count": 4, "next": null, "previous": null, "results": [ { "month_year": "6-2019", "events": [ { "id": 30, "title": "Event 2", "description": "Event 2", "date": "2019-06-02" }, { "id": 31, "title": "Event 3", "description": "Event 3", "date": "2019-06-04" } ] }, { "month_year": "9-2019", "events": [ { "id": 32, "title": "Event 4", "description": "Event 4", "date": "2019-09-04" }, { "id": 29, "title": "Event 1", "description": "Event 1", "date": "2019-09-25" } ] }, ] }
check you data base from django admin maybe you duplicate the data ! there is no error in the code
does it worked ??
No.
Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink.
Hide child comments as well
Confirm
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Here are my codes
models.py
views.py
Serializer.py
can you please tell me why same month showing twice with same data?
models.py
serializer.py
views.py
results
it should be like this
check you data base from django admin maybe you duplicate the data !
there is no error in the code
does it worked ??
No.