关于 django REST CRUD 的简单示例

沙哈卜

我正在为一家餐厅开发 Django REST API 项目。

我必须获取客户端请求,对于某些请求发送模型对象,对于更新或删除请求向客户端发送反馈。

假设我models.py是这样的:

# models.py
---------------------------------------------------------------------------
class Table(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=30, null=False, blank=False)
    is_free = models.BooleanField(default=True)

    def __str__(self):
        return '%s %s %s' % (self.id, self.name, self.is_free)


class Order(models.Model):
    order_id = models.AutoField(primary_key=True)
    table_id = models.ForeignKey(Table, on_delete=models.CASCADE)
    total_price = models.IntegerField()

    def __str__(self):
        return '%s %s' % (self.order_id, self.total_price)

我想发送客户端 GET 请求的所有订单列表,发送更新和删除请求的反馈,并发送 True 或 False,无论从客户端发送的带有 id 的特定表是否空闲。

不幸的是,在阅读了这么多文件后,我很困惑。

你能举一个简单的例子来实现这些目的吗?

在那之后,你能给我一个例子来说明如何为客户使用序列化一个无模型对象吗?

提前致谢。

威尔基林

也许最简单的方法是使用ModelViewSetand ModelSerializer,它将提供基本的 CRUD 操作。

序列化程序.py

class OrderSerializer(serializers.ModelSerializer):
    class Meta:
        model = Order
        fields = ('order_id', 'table_id', 'total_price')

视图.py

class OrderViewSet(viewsets.ModelViewSet):
    queryset = Order.objects.all()
    serializer_class = OrderSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filter_fields = ('table_id',)

网址.py

from rest_framework import routers

router = routers.SimpleRouter()
router.register(r'orders', OrderViewSet)
urlpatterns = router.urls

获取所有订单:

http://host/orders/

通过 id 获取订单:

http://host/orders/123/

获取特定表的所有订单:

http://host/orders/?table_id=456

使用 PUT 更新订单:

# PUT using form data total_price=100
http://host/orders/123/

# Response
{"order_id": 123, "table_id": 456, "total_price": 100}

使用 DELETE 删除订单:

# DELETE
http://host/orders/123/

# Response has no content

要查询具有特定 id 的表是否空闲,您可以使用相同的方法,但使用TableViewSet

# Get a table with a specific id
http://host/tables/456/

然后评估is_free您返回的 JSON 响应中属性。

# Response
{"id": 456, "name": "table name", "is_free": true}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章