【发布时间】:2015-09-22 20:13:29
【问题描述】:
我正在构建一个与 Django 数据库对话的 SMS API,该数据库是数百人的联系信息列表。字段如下:名字、姓氏、电话号码和职位。
当我在本地服务器上使用此 url 时收到响应:
http://localhost:8000/sources/id
我想做的是使用这个 url 向同一个数据库发出请求:
http://localhost:8000/sources/first_name-last_name
我调查了多个有关字段查找的问题,但没有任何帮助。这是我的 serializers.py 的样子:
from rest_framework import serializers, viewsets
from text_source.models import Source
class SourceSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Source
fields = ('id','first_name','last_name','title','organization','city','cell_phone','office_phone')
lookup_field = 'first_name'
class SourceViewSet(viewsets.ModelViewSet):
queryset = Source.objects.all()
serializer_class = SourceSerializer
lookup_field = ('first_name')
我不确定使用 /first_name-last_name 作为 url 的端点是否是最佳实践,但理论上我正在做的事情,它会起作用。
理想情况下,我希望有人在文本中键入 FIRSTNAME LASTNAME,并通过将全名连接到数据库中的 ID 让 API 返回正确的信息。任何实现这一目标的技巧将不胜感激。
urls.py
from django.conf.urls import include, url
from django.contrib import admin
from django.views.generic.base import TemplateView
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets
from app import views
from app.serializers import SourceSerializer, SourceViewSet
router = routers.DefaultRouter()
router.register(r'sources', SourceViewSet)
urlpatterns = [
url(r'^page/$', TemplateView.as_view(template_name='base.html')),
url(r'^page/', include(router.urls)),
url(r'^admin/', include(admin.site.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^page/incoming/message$', views.incoming_message)
]
【问题讨论】:
-
在视图中,为什么要把
lookup_field = ('first_name')括在圆括号中? -
阅读here 了解一个不错的mixin,您可以使用它来查找多个字段(页面底部,查找
MultipleFieldLookupMixin)。然后确保更新urls.py以正确匹配和命名关键字参数(姓名和姓氏)
标签: python django django-rest-framework