【发布时间】:2016-03-07 15:54:07
【问题描述】:
我创建了一个小型任务应用程序并定义了一些终点,例如所有任务、到期任务、已完成任务。
这是我的 url.py
#Define API Routes
router = routers.DefaultRouter()
#router = routers.SimpleRouter()
router.register(r'task', views.TaskViewSet)
router.register(r'due_task', views.DueTaskViewSet)
router.register(r'completed_task', views.CompletedTaskViewSet)
urlpatterns = [
# Examples:
# url(r'^$', 'TaskAPI.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^',include(router.urls)),
url(r'^admin/', include(admin.site.urls)),
]
序列化器.py
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = ('id','task_name','task_desc','completed','date_created')
查看.py
class TaskViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all().order_by('-date_created')
serializer_class = TaskSerializer
class DueTaskViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all().order_by('-date_created').filter(completed=False)
serializer_class = TaskSerializer
class CompletedTaskViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all().order_by('-date_created').filter(completed=True)
serializer_class = TaskSerializer
模型.py
class Task(models.Model):
task_name = models.CharField(max_length=20)
task_desc = models.TextField(max_length=200)
completed = models.BooleanField(default=False)
date_created = models.DateTimeField(auto_now=True)
当我运行服务器并点击 127.0.0.1:8080 API 路由窗口将打开,所有端点都指向同一个链接。
请提出这里出了什么问题。 谢谢
【问题讨论】:
-
查看您的序列化程序代码会很有帮助。我将假设您的
task、due_task和completed_task是关系。如果是这种情况,DRF 默认使用HyperlinkedRelatedField。 -
@themanatuf:我已经更新了我的代码。请调查一下。谢谢
-
嗯...我不能 100% 确定 DRF 在幕后是如何工作的,但我的猜测是,由于您使用相同的序列化程序定义了三个视图,因此 DRF 正在使用最后一个。也许尝试过滤一个视图集而不是三个:django-rest-framework.org/api-guide/filtering
-
@themanatuf:谢谢,但是在 DRF 中不可能使用具有不同视图的相同序列化程序吗?
标签: django django-rest-framework