Han*_*nan 1 python django django-rest-framework
我想通过用户提供的 URL 过滤我的 Django Rest Framework 序列化数据。这是我的代码:
模型.py:
class Airline(models.Model):
name = models.CharField(max_length=10, blank=True, null=True)
code = models.CharField(max_length=2, blank=True, null=True)
def __str__(self):
return self.name
class FinancialData(models.Model):
airline = models.ForeignKey(Airline)
mainline_revenue = models.DecimalField(max_digits=7, decimal_places=2)
regional_revenue = models.DecimalField(max_digits=7, decimal_places=2)
other_revenue = models.DecimalField(max_digits=7, decimal_places=2)
total_revenue = models.DecimalField(max_digits=7, decimal_places=2)
def __str__(self):
return str(self.mainline_revenue)
Run Code Online (Sandbox Code Playgroud)
视图.py:
class ListAirlineFinancialData(generics.ListAPIView):
serializer_class = FinancialDataSerializer
def get_queryset(self, *args, **kwargs):
query_list = FinancialData.objects.filter(pk=airline_id)
Run Code Online (Sandbox Code Playgroud)
网址.py:
urlpatterns = [
url(r'^api/v1/airline/(?P<pk>\d+)/$', views.ListAirlineFinancialData.as_view(), name='airline_financial_data'),
]
Run Code Online (Sandbox Code Playgroud)
我应该在视图中编码什么来过滤以下 URL 的数据。 http://localhost:8000/api/v1/airline/3/
此时 Django 给了我一个错误,名称“airline_id”未定义我可以理解它希望我传递我数据库中的 airline_id 但我真的不知道该怎么做。我应该在 views.py 中编写什么代码来过滤航空公司任何特定 ID 的所有数据。谢谢
您的解决方法是正确的。但是,您的代码对读者来说似乎不明确。
例如:如果您在 FinancialData 上应用查询,那么您的 url 模式应该在 urlpath 而不是航空公司中包含财务数据。也<pk>通常用作您正在应用查询的模型的主键,而不是模型上的外键。
所以urlpattern应该像
urlpatterns = [
url(
r'^api/v1/financialdata/(?P<airline_pk>\d+)/$',
views.ListAirlineFinancialData.as_view(),
name='airline_financial_data'),
]
Run Code Online (Sandbox Code Playgroud)
和网址将是这样的: /api/v1/financialdata/1/
此外,将过滤器参数作为query_params. 在这种情况下,您的 urlpattern 将是
url(
r'^api/v1/financialdata/$',
views.ListAirlineFinancialData.as_view(),
name='airline_financial_data'),
]
Run Code Online (Sandbox Code Playgroud)
你的网址将是这样的: /api/v1/financialdata/?airline_pk=1
如果将过滤器参数作为 query_params 传递,您get_queryset会有所不同:
def get_queryset(self, *args, **kwargs):
return self.queryset.filter(airline_id=self.request.GET.get('airline_pk'))
Run Code Online (Sandbox Code Playgroud)
最后,Django Rest Framework 非常强大且使用简单。您可以在Django Rest Framework Filtering上阅读有关过滤器的更多信息
| 归档时间: |
|
| 查看次数: |
4610 次 |
| 最近记录: |