【问题标题】:Why does Django REST Framework return empty list?为什么 Django REST Framework 返回空列表?
【发布时间】:2016-07-03 08:25:20
【问题描述】:

在生产环境中,我们实现了简单的 Django REST,它从数据库中返回所有对象:

urls.py:

router = routers.DefaultRouter(trailing_slash=False)
router.register(r'clubs', views.ClubViewSet)

urlpatterns = patterns(
    '',
    url(r'^', include(router.urls)),
    url(r'^filters/', views.ClubFilterView.as_view())
)

views.py:

from .serializers import ClubSerializer, ClubFilterSerializer
from .models import (Club, ImageForClub, ClubStaff, ClubFilter,
                     Metro, Rajon, Okrug, Street, Rajon, Rubric, Equipment)
class ClubViewSet(generics.ListAPIView, viewsets.GenericViewSet):
    queryset = Club.objects.filter(latitude__isnull=False)
    throttle_classes = (throttling.ScopedRateThrottle,)
    filter_backends = (filters.SearchFilter,)
    search_fields = ('title',)
    serializer_class = ClubSerializer
    pagination_class = None
    paginate_by = None

在生产中,它工作得很好。但是当我尝试在本地 MacBook Air 上部署它时,它开始表现得很奇怪:

在 python manage.py shell 中,我可以从数据库中接收对象:

In [5]: from apps.clubs.models import Club

In [6]: x = Club.objects.get(pk=1)

In [7]: x
Out[7]: <Club: Pattana Sport>

但是当我尝试以图片上的方式向 Django REST 发送请求时,我收到的只是一个空列表:

尽管相同的生产请求返回数据库中所有对象的列表。我正在使用相同的数据库 - postgres,我使用以下命令将数据库从生产环境转储并恢复到本地计算机:

$ sudo su - postgres 
$ psql [database_name] << file_dump.sql

之后,我授予 Django 用来登录该数据库的所有权限的用户。

我做错了什么?以及如何调试这种奇怪的行为?我已经检查了我能做的一切......

【问题讨论】:

    标签: python django postgresql rest django-rest-framework


    【解决方案1】:

    好吧,您正在通过 latitude__isnull=False 过滤项目,我想这对于您数据库中的项目来说不是假的

    【讨论】:

    • 相反,我们应该得到俱乐部的值,其中经纬度不为假。实际上,我们在数据库中对应的表中有这些记录:经度 |纬度------------+----------- 61.399192 | 55.155162
    • @paus 可能是移植数据库后关系损坏了?
    • 在这种情况下,我认为,我将无法通过 Django ORM 操作数据库对象。但我可以在 django shell 中通过 id 接收俱乐部。
    • 如何检查这个假设?
    • 检查返回对象的latitude_set
    猜你喜欢
    • 2021-10-02
    • 2019-08-19
    • 2016-10-31
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2015-07-26
    相关资源
    最近更新 更多