【问题标题】:Pass current value(instance) in the update form在更新表单中传递当前值(实例)
【发布时间】:2016-09-04 12:59:24
【问题描述】:

我有一个用于更新对象的 api。但更新表单显示空字段。如何显示用当前值填充的表格?如果我想显示只用 django 填充的当前值,我会做 formname(instance=object)。使用 RetrieveAPIView 时如何在 DRF 中进行类似操作。

class RestaurantUpdateAPI(RetrieveAPIView):
    queryset = Restaurant.objects.all()
    serializer_class = RestaurantCreateUpdateSerializer

    def perform_update(self, serializer):
        print('serializer',serializer)
        instance = serializer.save()
        # send_email_confirmation(user=self.request.user, modified=instance)

这段代码给了我空的表格。我希望名称字段应该有餐厅的名称,城市应该有城市名称等等。

如何在 DRF RetrieveAPIView 中做到这一点?

【问题讨论】:

  • 你想在 DRF 中使用 {{ form }} 吗?
  • Nup 我想在 API 自己的表单上。我将附上相关表格。
  • @Aison 我已经用更新表单图像更新了我的问题。
  • 我认为禁用get方法时无法获取数据,您是否尝试覆盖get方法?
  • Nup。所以我应该覆盖get方法?

标签: python django python-3.x django-rest-framework


【解决方案1】:

你的 api url 是 ../edit/...,所以我想你想用这个 api 来编辑你的餐厅。(顺便说一句,REST API 不应该在其中使用“编辑”,你只需使用 http 方法来处理这个)。在你的情况下,如果你想同时使用get方法和post方法。你应该使用RetrieveUpdateDestroyAPIView

用于读写删除端点以表示单个模型实例。

提供 get、put、patch 和 delete 方法处理程序。

扩展:GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixin

【讨论】:

  • 我会看看的。 udpate 和 destroy 只有一个视图,我应该定义所有 get put 和 delete 方法。这意味着我将只有一个 url 用于更新和删除。
  • 是的,只需一个网址即可轻松维护。
  • 我对应该给出什么网址感到困惑。因为一个 url 同时做更新和删除工作。
  • 您可以使用 api/restaurant 之类的 url 来处理 CRUD(创建的 post 方法、列出的 get 方法、更新的 put 方法和删除的 delete 方法)。看看stackoverflow.com/questions/671118/…
  • 但是在我的情况下,序列化程序类对于获取和发布、更新和删除会有所不同。你可以在这里看到github.com/Tushant/foodie-rest-api/tree/master/restaurants/api
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2021-07-28
  • 1970-01-01
相关资源
最近更新 更多