在我的models.py
中,我创建了一个用户认为不可编辑的字段:
request_status = models.CharField(
max_length = 100,
default = 'received',
editable = False
)
在views.py
文件中,我重写了create()
方法(来自generics.ListCreateAPIView
和CreateModelMixin
超类)来激活docker容器,如果成功的话,我想将request_status
字段修改为类似container_activated
的内容,然后将HTTP响应发送回用户。你知道吗
所以。。。有没有办法修改不可编辑的字段?有没有更好的方法来设置model
?你知道吗
我最好的猜测是,有一种方法可以修改通过标准create()
方法的一行在API DB中注册的数据(不可编辑的字段不会出现在data
属性中):
serializer = self.get_serializer(data = request.data)
serializer.is_valid(raise_exception = True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
editable=False
并不意味着你不能编辑这个字段,它只意味着默认情况下它不会出现在admin或modelforms中。在DRF中,这意味着它将自动设置为read_only
;但是您可以通过手动定义字段来覆盖它。你知道吗这是一种规避,但它或多或少运作良好。我将我的字段改回
editable = True
,然后简单地强制它成为默认的锁定(硬编码)值。最后,在views.py
类的create()
内,您可以放置如下内容:关键部分是要理解,您可以通过从
request.data.dict()
更改字典来覆盖进入API内部的httppost中的内容。然后您只需在self.get_serializer()
内传递dict(实际上通常是QueryDict
),并遵循标准的create()
方法。你知道吗如果您配置
editable = False
,您就不能以我在这里发布的方式强制更改。最后可能还有更好的办法。你知道吗相关问题 更多 >
编程相关推荐