首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Django REST更新模型实例

问通过Django REST更新模型实例
EN

Stack Overflow用户
提问于 2017-11-13 20:06:17
回答 1查看 1.1K关注 0票数 1

我有一个模型“任务”,我希望能够通过api更新。

按评论更新

urls.py

代码语言:javascript
复制
router = routers.DefaultRouter()
router.register(r'assignments', views.AssignmentList, base_name='Assignments')

urlpatterns = [
    url(r'^api/v1/', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]

serializers.py

代码语言:javascript
复制
class AssignmentSerializer(serializers.ModelSerializer):
class Meta:
    model = Assignment
    fields = (
        'id', 'company', 'farm', 'sensor', 'name', 'location', 'notes', 'units', 'max_height', 'frequency',
        'interval', 'max_threshold', 'min_threshold', 'notify', 'last_alert_time', 'last_alert_water_level')

views.py

代码语言:javascript
复制
class AssignmentList(viewsets.ModelViewSet):
serializer_class = AssignmentSerializer
pagination_class = None

def get_queryset(self):
    queryset = Assignment.objects.all()
    company_id = self.request.query_params.get('company_id', None)
    sensor_id = self.request.query_params.get('sensor_id', None)
    if company_id is not None:
        queryset = Assignment.objects.filter(company_id=company_id)
    if sensor_id is not None:
        queryset = Assignment.objects.filter(sensor_id=sensor_id)
    return queryset

目前,我的观点允许基于两个字段“company_id”和“传感器_id”进行简单的过滤。这样可以方便地访问json中的数据。不幸的是,即使使用内置的API表单,我也不知道如何回发。我希望能够过滤到单个实例,并编辑一个字段,让我们现在说"assignment.name“。

据我理解..。

ModelViewSet类提供的操作是.list()、.retrieve()、.create()、.update()、.partial_update()和.destroy()。(DRF文档)

那么,我需要做些什么来利用它们通过url编辑模型实例呢?或者老实说,只编辑一个句号。我一直在尝试不同的混合视图(UpdateAPIView,RetrieveUpdateAPIView等)。这个问题,特别是堆栈溢出: Django Rest框架更新字段。

EN

回答 1

Stack Overflow用户

发布于 2017-11-13 20:43:04

为什么缺少所需的外键字段完全是个问题。

原因可能是您的字段被称为company、farm和sensor,而不是company_id等等。因为底层数据库字段被称为company_id等等,DRF在模型中将它们检测为只读属性,因此允许您在字段元组中指定这些名称而不显示错误,但不会在可浏览的API中显示字段。更改fields元组以包含Django字段的实际名称。

还请注意,由于您使用的是HyperlinkedModelSerializer,DRF它希望为这些相关模型提供一个链接的ViewSet。如果没有这些定义,则将其转换为基本的ModelSerializer。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47272676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档