【发布时间】:2020-02-20 04:46:06
【问题描述】:
我创建了一个 DRF API 端点,以便能够将一些数据抓取到我的数据库并使用 Jquery 在我的 Django 页面上显示。
我的示例数据如下所示:
{
"item": "Someitem",
"Price": 120,
"Status": "Free"
},
{
"item": "SecondItem",
"Price": 90,
"Status": "Taken"
},
因此,如果我从 JQuery 检索端点到此链接:http://127.0.0.1:8000/tst/,我将获取所有记录并将所有记录显示在我的网页中。但是,例如,如果我只想仅检索Status 字段设置为Taken 的记录怎么办?有什么方法可以编辑 DRF 请求使其指向http://127.0.0.1:8000/tst/Taken?或者相反,如果用户想要检索状态设置为Free 的所有其他人,它将指向http://127.0.0.1:8000/tst/Free?我知道我可以用 jquery 来做,但我实际上想在服务器端做。
我试过这个:
queryset = tst.objects.filter(Status="Taken")
但这里的问题是,它总是会仅从我的数据库中获取Taken 记录。就我而言,我想找到一种方法来有时从模板中检索Taken,并在其他时候检索Free。
我对 DRF 还很陌生,所以我的设置非常基本:
views.py
class tstList(generics.ListCreateAPIView):
queryset = tst.objects.all()
serializer_class = tstSerializer
class tstDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = tst.objects.all()
serializer_class = tstSerializer
url.py
path('tst/', views.tstList.as_view()),
path('tst/<int:pk>/', views.tstDetail.as_view()),
models.py
class tst(models.Model):
item = models.CharField()
Price = models.FloatField()
Status = models.CharField()
def save(self, *args, using=None, **kwargs):
super(tst, self).save(*args, **kwargs)
【问题讨论】:
-
您的示例数据...这些数据来自模型还是您通过前端/jquery 发送它们?
-
它们来自我的模型。存储在我的数据库中
-
你运行的是什么版本? (
python --version、pip --version、pip show django、pip show django-filter、pip show djangorestframework)Julien 的答案适用于我在 Ubuntu 18.04 上使用 python 3.6.8、pip 19.2.3、django 2.2.6、django-filter 2.2。 0、djangorestframework 3.10.3. -
它是 Python 3.6、Django 2.1.7、DRF 3.9.2、Django Filter 1.1.0
-
好的。问题是 Django 过滤器。我有 1.1 版本,我需要 2.0 版本。非常感谢@krubo!
标签: python json django django-rest-framework