Saya mencoba mengembalikan berbagai objek yang berisi atribut tanggal. Menggunakan pencarian bidang rentang, ini hanya mengembalikan objek dengan rentang awal.

Sebagai contoh:

Jika awal rentang sama dengan 2021-05-19 dan akhir rentang sama dengan 2021-05-21, hanya objek dengan tanggal 2021-05-19 yang dikembalikan.

Urls.py

urlpatterns = [
    ...
    path('weekly/<str:activity_date>/', views.ActivityDateList.as_view(), name='weekly_dates'),
    ...
]

Views.py

from django.shortcuts import render
from rest_framework import generics
from .serializers import ActivityListSerializer
from .models import Activity
from keeper import serializers
...

class WeeklyActivityView(generics.ListAPIView):
    serializer_class = ActivityListSerializer

    def get_queryset(self):
        end_of_week = "2021-05-21" # Temporary test date
        activity_date = self.kwargs['activity_date']

        return render(Activity.objects.filter(activity_date__range=(activity_date, end_of_week)))

Model.py

class Activity(models.Model):
    activity_name = models.CharField(max_length=200, blank=False)
    activity_duration = models.CharField(max_length=300, blank=False)
    activity_date = models.DateField(auto_now=False, blank=False)

    def __str__(self):
        return f"Activity: {self.activity_name} Started at: {self.activity_start} Activity Duration: {self.activity_duration}"

Serializers.py

from rest_framework import serializers
from .models import Activity
from rest_framework.reverse import reverse

class ActivityListSerializer(serializers.ModelSerializer):
    absolute_url = serializers.SerializerMethodField()

    class Meta:
        model = Activity
        fields = [
            'activity_name',
            'activity_duration',
            'activity_date',
            'absolute_url'
        ]

    def get_absolute_url(self, obj):
        return reverse('activities_detail', args=(obj.pk,))

Hanya satu tanggal yang dikembalikan: Output

Bagaimana saya bisa mengembalikan objek dengan atribut tanggal dalam rentang yang ditentukan?

0
S Person D Person 21 Mei 2021, 10:42

2 jawaban

Jawaban Terbaik

Menjadi buta, di urls.py saya lulus: views.ActivityDateList.as_view() bukannya views.WeeklyActivityView.as_view().

Juga, saya menggunakan render, namun tidak ada templat yang akan dirender, oleh karena itu kesalahan "templat tidak ada" akan muncul. Ide yang benar adalah menghilangkan render()

-1
S Person D Person 22 Mei 2021, 06:30

Dalam kode untuk menggunakan tanggal tambahkan __tanggal ke bidang

return render(Activity.objects.filter(activity_date__range=(activity_date, end_of_week)))

Ubah dengan

return render(Activity.objects.filter(activity_date__date__range=(activity_date, end_of_week)))

0
Visakh B Sujathan 21 Mei 2021, 11:30