【问题标题】:Django Rest Framework add field to model before saving in viewset using ModelSerializerDjango Rest Framework 在使用 ModelSerializer 保存在视图集中之前向模型添加字段
【发布时间】:2015-02-28 18:03:33
【问题描述】:

使用 Django Rest 框架,在我实际保存 ModelSerializer 管理的模型之前,我想在数据库中设置一个不能为空的字段,但它不包含在 Meta 类的 fields 元组中。

在我的ViewSet 中,我定义了perform_create 并想做这样的事情:

serializer.fields.new_field = new_field_id

new_field 是我模型上的外键,new_field.id 是我刚刚使用 cookie 上设置的值获取的模型的 ID。

有没有人知道一个干净的解决方案?

谢谢!

【问题讨论】:

  • 查看此question
  • @Todor 另一种解决方案。已经三个了!谢谢

标签: python django serialization django-rest-framework


【解决方案1】:

你是说这个吗..?

def perform_create(self, serializer):
    serializer.save(user=self.request.user)

【讨论】:

  • 嗯,我也试过了,然后它告诉我:user is an invalid keyword argument for this function。我选择了一个中间件解决方案,我在每个request.method == "POST" 上修改request.POST。这很好用,因为我需要将该字段添加到多个资源中,并且可以依赖 DRF 的内置验证器。尽管我读到修改 request.POST 不是一个好主意,但它对 DRY 有帮助
  • 好吧,PyCharm 让我在那里。它建议了一个不同的 kwarg,我刚刚意识到我的模型字段的名称与 PyCharm 建议的名称不同。我似乎现在有两个有效的解决方案。太好了,谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-08-26
  • 2019-05-18
  • 2013-01-13
  • 2020-06-27
  • 2018-07-07
  • 1970-01-01
  • 2017-03-05
相关资源
最近更新 更多