首页 > 解决方案 > 无法在 DJANGO Rest Framework 的视图和 url 中创建动态变量

问题描述

我正在尝试创建一个类似“http://127.0.0.1:8000/api/data/year”的 api。但我做不到,无法在端点中动态显示年份。请检查 urls.py 的第二个问题 - 我想让 requestsYear 在views.py 中动态化。

参考文件如下所述。请检查。

模型.py

class DataModel(models.Model):
    city = models.CharField(max_length=100)
    date = models.DateField(editable=True)

序列化程序.py

class DataSerializer(serializers.ModelSerializer):
    YearOfDate = serializers.SerializerMethodField()
    class Meta:
        model = DataModel
        fields = ['id', 'city', 'date', 'YearOfDate']
    def get_YearOfDate(self, obj):
        return obj.date.year

视图.py

class DataListView(generics.ListAPIView):
    serializer_class = DataSerializer
    model = DataModel
    queryset = model.objects.all()
    def get_queryset(self):
        requestedYear = 2009
        return DataModel.objects.filter(date__year=requestedYear)

网址.py

urlpatterns = [ path('admin/', admin.site.urls), 
path('api/data/2009', views.DataListView.as_view()),
#re_path(r'^api/match/(?P<year>[0-9]{4})/$', views.DataListView.as_view()),]

标签: djangodjango-rest-frameworkdjango-viewsdjango-urls

解决方案


在您的网址中度过这一年

urlpatterns = [ path('admin/', admin.site.urls), 
path('api/data/<int:year>', views.DataListView.as_view())]

kwargs 现在将在 url 中包含过去的年份

class DataListView(generics.ListAPIView):

   queryset = DataModel.objects.all()
   serializer_class = DataSerializer

   def get(self, request, *args, **kwargs):
        
        year = self.kwargs['year']
        return DataModel.objects.filter(date_year=year)

         

推荐阅读