【问题标题】:Unable to make dynamic variables in views and url of DJANGO Rest Framework无法在 DJANGO Rest Framework 的视图和 url 中创建动态变量
【发布时间】:2021-07-24 22:23:27
【问题描述】:

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

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

models.py

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

serializers.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

views.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)

urls.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()),]

【问题讨论】:

    标签: django django-rest-framework django-views django-urls


    【解决方案1】:

    在您的网址中传递年份

    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)
    
             
    

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 2016-09-04
      • 1970-01-01
      相关资源
      最近更新 更多