我有一个相当简单的对象。它有三个字段,fk到用户,标题和slug(从标题创建)。 slug字段和用户fk是唯一的。我想创建一个API端点,其中包含urls base_url / api-model-name(retrieve的所有objs),base_url / api-model-name / username(这用于创建/列表端点。仅此列表将具有FK的obj返回给用户)。 base_url / username / obj-slug - 用于更新/检索obj。
有什么想法吗?
答案 0 :(得分:0)
使用DRF,您可以遵循与此类似的模式。
<强> models.py 强>
class Foo(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=50)
class Meta:
unique_together = ('user', 'slug')
<强> serializers.py 强>
from rest_framework import serializers
from .models import Foo
class FooSerializer(serializers.ModelSerializer):
class Meta:
model = Foo
<强> views.py 强>
from rest_framework.permissions import IsAuthenticated
from .models import Foo
from .serializers import FooSerializer
class FooViewSet(viewsets.ModelViewSet):
serializer_class = FooSerializer
permission_class = (IsAuthenticated, )
queryset = Foo.objects.all()
<强> routers.py 强>
from rest_framework.routers import DefaultRouter
from .views import FooViewSet
router = DefaultRouter()
# registers viewset to url
router.register(r'foos', FooViewSet)
有了这个,您将拥有以下端点:
GET
/foobars
- 检索所有foobar对象添加pk并获取详细信息视图
POST
/foobars
- 创建foobar对象`{&#34; user&#34;:&#34;&#34;,&#34; title&#34;:&#34; &#34;,&#34; slug&#34;:&#34;&#34;}
对于任何其他自定义调用,您可以通过DRF装饰器(detail_route,list_route)向主ViewSet添加其他方法。但是遵循这种模式,您可以构建强大的API。